Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r64745 - in branches/release: . boost boost/algorithm/string boost/archive boost/bimap boost/config boost/detail boost/functional/hash boost/fusion boost/gil boost/graph boost/integer boost/interprocess boost/intrusive boost/io boost/iostreams boost/math boost/msm boost/numeric/ublas boost/program_options boost/property_tree boost/python boost/range boost/regex boost/serialization boost/signals boost/signals2 boost/spirit boost/spirit/home boost/spirit/home/karma boost/spirit/home/support boost/statechart boost/system boost/thread boost/tr1 boost/type_traits boost/unordered boost/utility boost/uuid boost/variant boost/wave doc libs libs/algorithm/string libs/array/doc libs/array/test libs/bimap libs/config libs/config/test libs/functional/hash libs/fusion libs/graph_parallel libs/integer libs/interprocess libs/intrusive libs/iostreams libs/math libs/math/doc/sf_and_dist libs/mpl/doc/refmanual libs/mpl/doc/src/refmanual libs/msm libs/numeric/ublas libs/numeric/ublas/doc libs/program_options libs/property_tree libs/python libs/range libs/regex libs/regex/doc libs/serialization libs/serialization/test libs/signals libs/signals2 libs/spirit libs/spirit/classic/example libs/spirit/doc libs/spirit/example libs/spirit/phoenix libs/spirit/test libs/spirit/test/qi libs/statechart libs/static_assert libs/system libs/thread libs/timer libs/tr1 libs/type_traits libs/type_traits/doc libs/unordered libs/utility libs/utility/swap/test libs/uuid libs/wave more more/getting_started status tools tools/bcp tools/boostbook tools/build/v2 tools/inspect tools/jam tools/quickbook tools/regression tools/release tools/wave
From: daniel.j.walker_at_[hidden]
Date: 2010-08-11 14:15:48


Author: djwalker
Date: 2010-08-11 14:15:46 EDT (Wed, 11 Aug 2010)
New Revision: 64745
URL: http://svn.boost.org/trac/boost/changeset/64745

Log:
merged [64695] and [64696] result_of docs from trunk
Properties modified:
   branches/release/ (props changed)
   branches/release/INSTALL (props changed)
   branches/release/Jamroot (props changed)
   branches/release/LICENSE_1_0.txt (props changed)
   branches/release/boost/ (props changed)
   branches/release/boost-build.jam (props changed)
   branches/release/boost.css (props changed)
   branches/release/boost.png (props changed)
   branches/release/boost/algorithm/string/ (props changed)
   branches/release/boost/archive/ (props changed)
   branches/release/boost/archive/basic_archive.hpp (props changed)
   branches/release/boost/array.hpp (props changed)
   branches/release/boost/bimap/ (props changed)
   branches/release/boost/config/ (props changed)
   branches/release/boost/config.hpp (props changed)
   branches/release/boost/detail/ (props changed)
   branches/release/boost/detail/endian.hpp (props changed)
   branches/release/boost/functional/hash/ (props changed)
   branches/release/boost/fusion/ (props changed)
   branches/release/boost/gil/ (props changed)
   branches/release/boost/graph/ (props changed)
   branches/release/boost/integer/ (props changed)
   branches/release/boost/interprocess/ (props changed)
   branches/release/boost/intrusive/ (props changed)
   branches/release/boost/io/ (props changed)
   branches/release/boost/iostreams/ (props changed)
   branches/release/boost/math/ (props changed)
   branches/release/boost/math_fwd.hpp (props changed)
   branches/release/boost/msm/ (props changed)
   branches/release/boost/numeric/ublas/ (props changed)
   branches/release/boost/numeric/ublas/functional.hpp (props changed)
   branches/release/boost/program_options/ (props changed)
   branches/release/boost/property_tree/ (props changed)
   branches/release/boost/python/ (props changed)
   branches/release/boost/range/ (props changed)
   branches/release/boost/regex/ (props changed)
   branches/release/boost/serialization/ (props changed)
   branches/release/boost/signals/ (props changed)
   branches/release/boost/signals2/ (props changed)
   branches/release/boost/spirit/ (props changed)
   branches/release/boost/spirit/home/ (props changed)
   branches/release/boost/spirit/home/karma/ (props changed)
   branches/release/boost/spirit/home/support/attributes.hpp (props changed)
   branches/release/boost/statechart/ (props changed)
   branches/release/boost/system/ (props changed)
   branches/release/boost/thread/ (props changed)
   branches/release/boost/thread.hpp (props changed)
   branches/release/boost/tr1/ (props changed)
   branches/release/boost/type_traits/ (props changed)
   branches/release/boost/unordered/ (props changed)
   branches/release/boost/utility/ (props changed)
   branches/release/boost/utility/value_init.hpp (props changed)
   branches/release/boost/uuid/ (props changed)
   branches/release/boost/variant/ (props changed)
   branches/release/boost/version.hpp (props changed)
   branches/release/boost/wave/ (props changed)
   branches/release/bootstrap.bat (props changed)
   branches/release/bootstrap.sh (props changed)
   branches/release/doc/ (props changed)
   branches/release/index.htm (props changed)
   branches/release/index.html (props changed)
   branches/release/libs/ (props changed)
   branches/release/libs/algorithm/string/ (props changed)
   branches/release/libs/array/doc/array.xml (props changed)
   branches/release/libs/array/test/array0.cpp (props changed)
   branches/release/libs/array/test/array2.cpp (props changed)
   branches/release/libs/bimap/ (props changed)
   branches/release/libs/config/ (props changed)
   branches/release/libs/config/test/boost_no_com_value_init.ipp (props changed)
   branches/release/libs/functional/hash/ (props changed)
   branches/release/libs/fusion/ (props changed)
   branches/release/libs/graph_parallel/ (props changed)
   branches/release/libs/integer/ (props changed)
   branches/release/libs/interprocess/ (props changed)
   branches/release/libs/intrusive/ (props changed)
   branches/release/libs/iostreams/ (props changed)
   branches/release/libs/libraries.htm (props changed)
   branches/release/libs/maintainers.txt (props changed)
   branches/release/libs/math/ (props changed)
   branches/release/libs/math/doc/sf_and_dist/ (props changed)
   branches/release/libs/mpl/doc/refmanual/broken-compiler-workarounds.html (props changed)
   branches/release/libs/mpl/doc/refmanual/categorized-index-concepts.html (props changed)
   branches/release/libs/mpl/doc/refmanual/cfg-no-preprocessed-headers.html (props changed)
   branches/release/libs/mpl/doc/refmanual/composition-and-argument-binding.html (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-concepts.html (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-miscellaneous.html (props changed)
   branches/release/libs/mpl/doc/refmanual/extensible-associative-sequence.html (props changed)
   branches/release/libs/mpl/doc/refmanual/inserter-class.html (props changed)
   branches/release/libs/mpl/doc/refmanual/tag-dispatched-metafunction.html (props changed)
   branches/release/libs/mpl/doc/refmanual/trivial-metafunctions-summary.html (props changed)
   branches/release/libs/mpl/doc/src/refmanual/Iterators-Iterator.rst (props changed)
   branches/release/libs/msm/ (props changed)
   branches/release/libs/numeric/ublas/ (props changed)
   branches/release/libs/numeric/ublas/doc/ (props changed)
   branches/release/libs/program_options/ (props changed)
   branches/release/libs/property_tree/ (props changed)
   branches/release/libs/python/ (props changed)
   branches/release/libs/range/ (props changed)
   branches/release/libs/regex/ (props changed)
   branches/release/libs/regex/doc/ (props changed)
   branches/release/libs/serialization/ (props changed)
   branches/release/libs/serialization/test/ (props changed)
   branches/release/libs/serialization/test/A.cpp (props changed)
   branches/release/libs/serialization/test/A.hpp (props changed)
   branches/release/libs/serialization/test/A.ipp (props changed)
   branches/release/libs/serialization/test/B.hpp (props changed)
   branches/release/libs/serialization/test/C.hpp (props changed)
   branches/release/libs/serialization/test/D.hpp (props changed)
   branches/release/libs/serialization/test/J.hpp (props changed)
   branches/release/libs/serialization/test/Jamfile.v2 (props changed)
   branches/release/libs/serialization/test/base.hpp (props changed)
   branches/release/libs/serialization/test/binary_archive.hpp (props changed)
   branches/release/libs/serialization/test/binary_warchive.hpp (props changed)
   branches/release/libs/serialization/test/derived2.hpp (props changed)
   branches/release/libs/serialization/test/dll_a.cpp (props changed)
   branches/release/libs/serialization/test/dll_base.cpp (props changed)
   branches/release/libs/serialization/test/dll_derived2.cpp (props changed)
   branches/release/libs/serialization/test/polymorphic_array_binary_archive.hpp (props changed)
   branches/release/libs/serialization/test/polymorphic_base.cpp (props changed)
   branches/release/libs/serialization/test/polymorphic_base.hpp (props changed)
   branches/release/libs/serialization/test/polymorphic_binary_archive.hpp (props changed)
   branches/release/libs/serialization/test/polymorphic_derived1.cpp (props changed)
   branches/release/libs/serialization/test/polymorphic_derived1.hpp (props changed)
   branches/release/libs/serialization/test/polymorphic_derived2.cpp (props changed)
   branches/release/libs/serialization/test/polymorphic_derived2.hpp (props changed)
   branches/release/libs/serialization/test/polymorphic_text_archive.hpp (props changed)
   branches/release/libs/serialization/test/polymorphic_text_warchive.hpp (props changed)
   branches/release/libs/serialization/test/polymorphic_xml_archive.hpp (props changed)
   branches/release/libs/serialization/test/polymorphic_xml_warchive.hpp (props changed)
   branches/release/libs/serialization/test/portable_binary_archive.hpp (props changed)
   branches/release/libs/serialization/test/test_array.cpp (props changed)
   branches/release/libs/serialization/test/test_binary.cpp (props changed)
   branches/release/libs/serialization/test/test_bitset.cpp (props changed)
   branches/release/libs/serialization/test/test_check.cpp (props changed)
   branches/release/libs/serialization/test/test_class_info_load.cpp (props changed)
   branches/release/libs/serialization/test/test_class_info_save.cpp (props changed)
   branches/release/libs/serialization/test/test_codecvt_null.cpp (props changed)
   branches/release/libs/serialization/test/test_complex.cpp (props changed)
   branches/release/libs/serialization/test/test_const_load_fail1.cpp (props changed)
   branches/release/libs/serialization/test/test_const_load_fail1_nvp.cpp (props changed)
   branches/release/libs/serialization/test/test_const_load_fail2.cpp (props changed)
   branches/release/libs/serialization/test/test_const_load_fail2_nvp.cpp (props changed)
   branches/release/libs/serialization/test/test_const_load_fail3.cpp (props changed)
   branches/release/libs/serialization/test/test_const_load_fail3_nvp.cpp (props changed)
   branches/release/libs/serialization/test/test_const_pass.cpp (props changed)
   branches/release/libs/serialization/test/test_const_save_warn1.cpp (props changed)
   branches/release/libs/serialization/test/test_const_save_warn1_nvp.cpp (props changed)
   branches/release/libs/serialization/test/test_const_save_warn2.cpp (props changed)
   branches/release/libs/serialization/test/test_const_save_warn2_nvp.cpp (props changed)
   branches/release/libs/serialization/test/test_const_save_warn3.cpp (props changed)
   branches/release/libs/serialization/test/test_const_save_warn3_nvp.cpp (props changed)
   branches/release/libs/serialization/test/test_const_save_warn4.cpp (props changed)
   branches/release/libs/serialization/test/test_const_save_warn4_nvp.cpp (props changed)
   branches/release/libs/serialization/test/test_contained_class.cpp (props changed)
   branches/release/libs/serialization/test/test_cyclic_ptrs.cpp (props changed)
   branches/release/libs/serialization/test/test_decl.hpp (props changed)
   branches/release/libs/serialization/test/test_delete_pointer.cpp (props changed)
   branches/release/libs/serialization/test/test_deque.cpp (props changed)
   branches/release/libs/serialization/test/test_derived.cpp (props changed)
   branches/release/libs/serialization/test/test_derived_class.cpp (props changed)
   branches/release/libs/serialization/test/test_derived_class_ptr.cpp (props changed)
   branches/release/libs/serialization/test/test_diamond.cpp (props changed)
   branches/release/libs/serialization/test/test_diamond_complex.cpp (props changed)
   branches/release/libs/serialization/test/test_dll_exported.cpp (props changed)
   branches/release/libs/serialization/test/test_dll_plugin.cpp (props changed)
   branches/release/libs/serialization/test/test_dll_simple.cpp (props changed)
   branches/release/libs/serialization/test/test_exported.cpp (props changed)
   branches/release/libs/serialization/test/test_inclusion.cpp (props changed)
   branches/release/libs/serialization/test/test_iterators.cpp (props changed)
   branches/release/libs/serialization/test/test_iterators_base64.cpp (props changed)
   branches/release/libs/serialization/test/test_list.cpp (props changed)
   branches/release/libs/serialization/test/test_list_ptrs.cpp (props changed)
   branches/release/libs/serialization/test/test_map.cpp (props changed)
   branches/release/libs/serialization/test/test_mi.cpp (props changed)
   branches/release/libs/serialization/test/test_mult_archive_types.cpp (props changed)
   branches/release/libs/serialization/test/test_multiple_inheritance.cpp (props changed)
   branches/release/libs/serialization/test/test_multiple_ptrs.cpp (props changed)
   branches/release/libs/serialization/test/test_new_operator.cpp (props changed)
   branches/release/libs/serialization/test/test_no_rtti.cpp (props changed)
   branches/release/libs/serialization/test/test_non_default_ctor.cpp (props changed)
   branches/release/libs/serialization/test/test_non_default_ctor2.cpp (props changed)
   branches/release/libs/serialization/test/test_non_intrusive.cpp (props changed)
   branches/release/libs/serialization/test/test_not_serializable.cpp (props changed)
   branches/release/libs/serialization/test/test_null_ptr.cpp (props changed)
   branches/release/libs/serialization/test/test_nvp.cpp (props changed)
   branches/release/libs/serialization/test/test_object.cpp (props changed)
   branches/release/libs/serialization/test/test_optional.cpp (props changed)
   branches/release/libs/serialization/test/test_pimpl.cpp (props changed)
   branches/release/libs/serialization/test/test_polymorphic.cpp (props changed)
   branches/release/libs/serialization/test/test_polymorphic2.cpp (props changed)
   branches/release/libs/serialization/test/test_polymorphic2.hpp (props changed)
   branches/release/libs/serialization/test/test_polymorphic2imp.cpp (props changed)
   branches/release/libs/serialization/test/test_polymorphic_A.cpp (props changed)
   branches/release/libs/serialization/test/test_polymorphic_A.hpp (props changed)
   branches/release/libs/serialization/test/test_primitive.cpp (props changed)
   branches/release/libs/serialization/test/test_private_base.cpp (props changed)
   branches/release/libs/serialization/test/test_private_ctor.cpp (props changed)
   branches/release/libs/serialization/test/test_recursion.cpp (props changed)
   branches/release/libs/serialization/test/test_registered.cpp (props changed)
   branches/release/libs/serialization/test/test_reset_object_address.cpp (props changed)
   branches/release/libs/serialization/test/test_set.cpp (props changed)
   branches/release/libs/serialization/test/test_shared_ptr.cpp (props changed)
   branches/release/libs/serialization/test/test_shared_ptr_132.cpp (props changed)
   branches/release/libs/serialization/test/test_shared_ptr_multi_base.cpp (props changed)
   branches/release/libs/serialization/test/test_simple_class.cpp (props changed)
   branches/release/libs/serialization/test/test_simple_class_ptr.cpp (props changed)
   branches/release/libs/serialization/test/test_singleton.cpp (props changed)
   branches/release/libs/serialization/test/test_smart_cast.cpp (props changed)
   branches/release/libs/serialization/test/test_split.cpp (props changed)
   branches/release/libs/serialization/test/test_static_warning.cpp (props changed)
   branches/release/libs/serialization/test/test_tools.hpp (props changed)
   branches/release/libs/serialization/test/test_tracking.cpp (props changed)
   branches/release/libs/serialization/test/test_traits_fail.cpp (props changed)
   branches/release/libs/serialization/test/test_traits_pass.cpp (props changed)
   branches/release/libs/serialization/test/test_unregistered.cpp (props changed)
   branches/release/libs/serialization/test/test_utf8_codecvt.cpp (props changed)
   branches/release/libs/serialization/test/test_valarray.cpp (props changed)
   branches/release/libs/serialization/test/test_variant.cpp (props changed)
   branches/release/libs/serialization/test/test_vector.cpp (props changed)
   branches/release/libs/serialization/test/test_void_cast.cpp (props changed)
   branches/release/libs/serialization/test/text_archive.hpp (props changed)
   branches/release/libs/serialization/test/text_warchive.hpp (props changed)
   branches/release/libs/serialization/test/xml_archive.hpp (props changed)
   branches/release/libs/serialization/test/xml_warchive.hpp (props changed)
   branches/release/libs/signals/ (props changed)
   branches/release/libs/signals2/ (props changed)
   branches/release/libs/spirit/ (props changed)
   branches/release/libs/spirit/classic/example/ (props changed)
   branches/release/libs/spirit/doc/ (props changed)
   branches/release/libs/spirit/example/ (props changed)
   branches/release/libs/spirit/phoenix/ (props changed)
   branches/release/libs/spirit/test/ (props changed)
   branches/release/libs/spirit/test/qi/optional.cpp (props changed)
   branches/release/libs/statechart/ (props changed)
   branches/release/libs/static_assert/ (props changed)
   branches/release/libs/system/ (props changed)
   branches/release/libs/thread/ (props changed)
   branches/release/libs/timer/ (props changed)
   branches/release/libs/tr1/ (props changed)
   branches/release/libs/type_traits/ (props changed)
   branches/release/libs/type_traits/doc/ (props changed)
   branches/release/libs/unordered/ (props changed)
   branches/release/libs/utility/ (props changed)
   branches/release/libs/utility/swap.html (props changed)
   branches/release/libs/utility/swap/test/std_bitset.cpp (props changed)
   branches/release/libs/utility/value_init.htm (props changed)
   branches/release/libs/utility/value_init_test.cpp (props changed)
   branches/release/libs/uuid/ (props changed)
   branches/release/libs/wave/ (props changed)
   branches/release/more/ (props changed)
   branches/release/more/getting_started/ (props changed)
   branches/release/rst.css (props changed)
   branches/release/status/ (props changed)
   branches/release/status/Jamfile.v2 (props changed)
   branches/release/tools/ (props changed)
   branches/release/tools/bcp/ (props changed)
   branches/release/tools/boostbook/ (props changed)
   branches/release/tools/build/v2/ (props changed)
   branches/release/tools/inspect/ (props changed)
   branches/release/tools/jam/ (props changed)
   branches/release/tools/quickbook/ (props changed)
   branches/release/tools/regression/ (props changed)
   branches/release/tools/release/ (props changed)
   branches/release/tools/wave/ (props changed)
Text files modified:
   branches/release/libs/utility/utility.htm | 96 ++++++++++++++++++++++++++++++++-------
   1 files changed, 78 insertions(+), 18 deletions(-)

Modified: branches/release/libs/utility/utility.htm
==============================================================================
--- branches/release/libs/utility/utility.htm (original)
+++ branches/release/libs/utility/utility.htm 2010-08-11 14:15:46 EDT (Wed, 11 Aug 2010)
@@ -151,35 +151,95 @@
                 <code>result_of&lt;F(T1, T2, ...,
                 T<em>N</em>)&gt;::type</code> defines the result type
                 of the expression <code>f(t1, t2,
- ...,t<em>N</em>)</code>. The implementation permits
+ ...,t<em>N</em>)</code>. This implementation permits
                 the type <code>F</code> to be a function pointer,
                 function reference, member function pointer, or class
- type. When <code>F</code> is a class type with a
+ type. By default, <em>N</em> may be any value between 0 and
+ 10. To change the upper limit, define the macro
+ <code>BOOST_RESULT_OF_NUM_ARGS</code> to the maximum
+ value for <em>N</em>. Class template <code>result_of</code>
+ resides in the header <code>&lt;<a
+ href="../../boost/utility/result_of.hpp">boost/utility/result_of.hpp</a>&gt;</code>.</p>
+
+ <p>If your compiler supports <code>decltype</code>,
+ then you can enable automatic result type deduction by
+ defining the macro <code>BOOST_RESULT_OF_USE_DECLTYPE</code>,
+ as in the following example.</p>
+
+ <blockquote>
+ <pre>#define BOOST_RESULT_OF_USE_DECLTYPE
+#include &lt;boost/utility/result_of.hpp&gt;
+
+struct functor {
+ template&lt;class T&gt;
+ T operator()(T x)
+ {
+ return x;
+ }
+};
+
+typedef boost::result_of&lt;
+ functor(int)
+&gt;::type type;</pre>
+ </blockquote>
+
+ <p>If <code>decltype</code> is not enabled,
+ then automatic result type deduction of function
+ objects is not possible. Instead, <code>result_of</code>
+ uses the following protocol to allow the programmer to
+ specify a type. When <code>F</code> is a class type with a
                 member type <code>result_type</code>,
                 <code>result_of&lt;F(T1, T2, ...,
                 T<em>N</em>)&gt;</code> is
- <code>F::result_type</code>. Otherwise,
+ <code>F::result_type</code>. When <code>F</code> does
+ not contain <code>result_type</code>,
                 <code>result_of&lt;F(T1, T2, ...,
                 T<em>N</em>)&gt;</code> is <code>F::result&lt;F(T1,
                 T2, ..., T<em>N</em>)&gt;::type</code> when
                 <code><em>N</em> &gt; 0</code> or <code>void</code>
- when <code><em>N</em> = 0</code>. For additional
- information about <code>result_of</code>, see the
- C++ Library Technical Report, <a
- href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">N1836</a>,
- or, for motivation and design rationale, the <code>result_of</code> <a
- href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1454.html">proposal</a>.</p>
-
- <p>Class template <code>result_of</code> resides in
- the header <code>&lt;<a
- href="../../boost/utility/result_of.hpp">boost/utility/result_of.hpp</a>&gt;</code>. By
- default, <em>N</em> may be any value between 0 and
- 10. To change the upper limit, define the macro
- <code>BOOST_RESULT_OF_NUM_ARGS</code> to the maximum
- value for <em>N</em>.</p>
+ when <code><em>N</em> = 0</code>. Note that it is the
+ responsibility of the programmer to ensure that
+ function objects accurately advertise their result
+ type via this protocol, as in the following
+ example.</p>
+
+ <blockquote>
+ <pre>struct functor {
+ template&lt;class&gt; struct result;
+
+ template&lt;class F, class T&gt;
+ struct result&lt;F(T)&gt; {
+ typedef T type;
+ };
+
+ template&lt;class T&gt;
+ T operator()(T x)
+ {
+ return x;
+ }
+};
+
+typedef boost::result_of&lt;
+ functor(int)
+&gt;::type type;</pre>
+ </blockquote>
 
                 <a name="BOOST_NO_RESULT_OF"></a>
- <p>This implementation of <code>result_of</code> requires class template partial specialization, the ability to parse function types properly, and support for SFINAE. If <code>result_of</code> is not supported by your compiler, including the header <code>boost/utility/result_of.hpp</code> will define the macro <code>BOOST_NO_RESULT_OF</code>. Contributed by Doug Gregor.</p>
+ <p>This implementation of <code>result_of</code>
+ requires class template partial specialization, the
+ ability to parse function types properly, and support
+ for SFINAE. If <code>result_of</code> is not supported
+ by your compiler, including the header
+ <code>boost/utility/result_of.hpp</code> will
+ define the macro <code>BOOST_NO_RESULT_OF</code>.</p>
+
+ <p>For additional information
+ about <code>result_of</code>, see the C++ Library
+ Technical Report,
+ N1836,
+ or, for motivation and design rationale,
+ the <code>result_of</code> proposal.</p>
+ Contributed by Doug Gregor.</p>
 
                 <h2>Class templates for the Base-from-Member Idiom</h2>
                 <p>See separate documentation.</p>


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