Generate doxygen xml reference

This commit is contained in:
Alan de Freitas 2021-11-05 21:52:17 -03:00
parent 0171af0f77
commit 1d6d44c1c4
20 changed files with 1165 additions and 246 deletions

4
doc/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
html
xml
temp
out.txt

View File

@ -10,7 +10,7 @@
[section Binary Integer Literals] [section Binary Integer Literals]
[/===============] [/===============]
[heading Introduction] [section Introduction]
The macro `BOOST_BINARY` is used for the representation of binary The macro `BOOST_BINARY` is used for the representation of binary
literals. It takes as an argument a binary number arranged as an literals. It takes as an argument a binary number arranged as an
@ -37,7 +37,9 @@ them as an extension.
The `BOOST_BINARY` family of macros resides in the header The `BOOST_BINARY` family of macros resides in the header
[@../../../include/boost/utility/binary.hpp <boost/utility/binary.hpp>]. [@../../../include/boost/utility/binary.hpp <boost/utility/binary.hpp>].
[heading Example] [endsect]
[section Example]
``` ```
void foo( int ); void foo( int );
@ -63,12 +65,21 @@ void bar()
} }
``` ```
[heading Acknowledgments] [endsect]
[/===============]
[xinclude boost_binary_reference.xml]
[/===============]
[section Acknowledgments]
Contributed by Matt Calabrese. Contributed by Matt Calabrese.
[endsect] [endsect]
[endsect]

View File

@ -3,6 +3,9 @@
# subject to the Boost Software License, Version 1.0. (See accompanying # subject to the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
import doxygen ;
import quickbook ;
project : requirements project : requirements
# Path for links to Boost: # Path for links to Boost:
<xsl:param>boost.root=../../../.. <xsl:param>boost.root=../../../..
@ -38,90 +41,356 @@ project : requirements
<format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/utility/doc/html <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/utility/doc/html
; ;
using quickbook ;
path-constant boost-images : ../../../doc/src/images ; path-constant boost-images : ../../../doc/src/images ;
xml base_from_member : base_from_member.qbk ; doxygen base_from_member_reference
boostbook standalone_base_from_member :
: [ glob ../include/boost/utility/base_from_member.hpp ]
base_from_member :
: <doxygen:param>ENABLE_PREPROCESSING=YES
# File name of HTML output: <doxygen:param>EXPAND_ONLY_PREDEF=YES
<xsl:param>root.filename=base_from_member <doxygen:param>EXTRACT_ALL=NO
# How far down we chunk nested sections, basically all of them: <doxygen:param>EXTRACT_PRIVATE=NO
<xsl:param>chunk.section.depth=0 <doxygen:param>HIDE_UNDOC_MEMBERS=YES
# Don't put the first section on the same page as the TOC: <doxygen:param>MACRO_EXPANSION=YES
<xsl:param>chunk.first.sections=0 <doxygen:param>"PREDEFINED= \\
# How far down sections get TOC's BOOST_UTILITY_DOCS \\
<xsl:param>toc.section.depth=1 BOOST_SYMBOL_VISIBLE= \\
# Max depth in each TOC: BOOST_FORCEINLINE=inline \\
<xsl:param>toc.max.depth=1 BOOST_GPU_ENABLED= \\
# How far down we go with TOC's BOOST_STATIC_ASSERT(x)= \\
<xsl:param>generate.section.toc.level=1 BOOST_STATIC_ASSERT_MSG(x,y)= \\
; BOOST_STATIC_CONSTANT(x,y)=\"static constexpr x y\" \\
BOOST_RV_REF(x)=\"x&&\" \\
BOOST_NESTED_TEMPLATE=template \\
BOOST_CONSTEXPR=constexpr \\
BOOST_CXX14_CONSTEXPR=constexpr \\
BOOST_OPERATORS_CONSTEXPR=constexpr \\
BOOST_CONSTEXPR_OR_CONST=constexpr \\
BOOST_NOEXCEPT=noexcept \\
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
BOOST_DELETED_FUNCTION(x)=\"x = delete;\" \\
BOOST_EXPLICIT_OPERATOR_BOOL()=\"explicit operator bool() const;\" \\
BOOST_REF_CONST=const"
<doxygen:param>"EXCLUDE_SYMBOLS=detail \\
F \\
result_of_has_result_type_impl \\
conditional \\
boost::operators_impl"
xml compressed_pair : compressed_pair.qbk ; ;
boostbook standalone_compressed_pair
:
compressed_pair
:
# File name of HTML output:
<xsl:param>root.filename=compressed_pair
# How far down we chunk nested sections, basically all of them:
<xsl:param>chunk.section.depth=0
# Don't put the first section on the same page as the TOC:
<xsl:param>chunk.first.sections=0
# How far down sections get TOC's
<xsl:param>toc.section.depth=1
# Max depth in each TOC:
<xsl:param>toc.max.depth=1
# How far down we go with TOC's
<xsl:param>generate.section.toc.level=1
;
xml declval : declval.qbk ; doxygen boost_binary_reference
boostbook standalone_declval :
: [ glob ../include/boost/utility/binary.hpp ]
declval :
: <doxygen:param>ENABLE_PREPROCESSING=YES
# File name of HTML output: <doxygen:param>EXPAND_ONLY_PREDEF=YES
<xsl:param>root.filename=declval <doxygen:param>EXTRACT_ALL=NO
# How far down we chunk nested sections, basically all of them: <doxygen:param>EXTRACT_PRIVATE=NO
<xsl:param>chunk.section.depth=0 <doxygen:param>HIDE_UNDOC_MEMBERS=YES
# Don't put the first section on the same page as the TOC: <doxygen:param>MACRO_EXPANSION=YES
<xsl:param>chunk.first.sections=0 <doxygen:param>"PREDEFINED= \\
# How far down sections get TOC's BOOST_UTILITY_DOCS \\
<xsl:param>toc.section.depth=1 BOOST_SYMBOL_VISIBLE= \\
# Max depth in each TOC: BOOST_FORCEINLINE=inline \\
<xsl:param>toc.max.depth=1 BOOST_GPU_ENABLED= \\
# How far down we go with TOC's BOOST_STATIC_ASSERT(x)= \\
<xsl:param>generate.section.toc.level=1 BOOST_STATIC_ASSERT_MSG(x,y)= \\
; BOOST_STATIC_CONSTANT(x,y)=\"static constexpr x y\" \\
BOOST_RV_REF(x)=\"x&&\" \\
BOOST_NESTED_TEMPLATE=template \\
BOOST_CONSTEXPR=constexpr \\
BOOST_CXX14_CONSTEXPR=constexpr \\
BOOST_OPERATORS_CONSTEXPR=constexpr \\
BOOST_CONSTEXPR_OR_CONST=constexpr \\
BOOST_NOEXCEPT=noexcept \\
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
BOOST_DELETED_FUNCTION(x)=\"x = delete;\" \\
BOOST_EXPLICIT_OPERATOR_BOOL()=\"explicit operator bool() const;\" \\
BOOST_REF_CONST=const"
<doxygen:param>"EXCLUDE_SYMBOLS=detail \\
F \\
result_of_has_result_type_impl \\
conditional \\
boost::operators_impl"
;
xml string_ref : string_ref.qbk ; doxygen call_traits_reference
boostbook standalone_string_ref :
[ glob ../include/boost/call_traits.hpp ../include/boost/detail/call_traits.hpp ]
:
<doxygen:param>ENABLE_PREPROCESSING=YES
<doxygen:param>EXPAND_ONLY_PREDEF=YES
<doxygen:param>EXTRACT_ALL=NO
<doxygen:param>EXTRACT_PRIVATE=NO
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
<doxygen:param>MACRO_EXPANSION=YES
<doxygen:param>"PREDEFINED= \\
BOOST_UTILITY_DOCS \\
BOOST_SYMBOL_VISIBLE= \\
BOOST_FORCEINLINE=inline \\
BOOST_GPU_ENABLED= \\
BOOST_STATIC_ASSERT(x)= \\
BOOST_STATIC_ASSERT_MSG(x,y)= \\
BOOST_STATIC_CONSTANT(x,y)=\"static constexpr x y\" \\
BOOST_RV_REF(x)=\"x&&\" \\
BOOST_NESTED_TEMPLATE=template \\
BOOST_CONSTEXPR=constexpr \\
BOOST_CXX14_CONSTEXPR=constexpr \\
BOOST_OPERATORS_CONSTEXPR=constexpr \\
BOOST_CONSTEXPR_OR_CONST=constexpr \\
BOOST_NOEXCEPT=noexcept \\
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
BOOST_DELETED_FUNCTION(x)=\"x = delete;\" \\
BOOST_EXPLICIT_OPERATOR_BOOL()=\"explicit operator bool() const;\" \\
BOOST_REF_CONST=const"
<doxygen:param>"EXCLUDE_SYMBOLS=detail \\
F \\
result_of_has_result_type_impl \\
conditional \\
boost::operators_impl"
;
doxygen compressed_pair_reference
:
[ glob ../include/boost/compressed_pair.hpp ../include/boost/detail/compressed_pair.hpp ]
:
<doxygen:param>ENABLE_PREPROCESSING=YES
<doxygen:param>EXPAND_ONLY_PREDEF=YES
<doxygen:param>EXTRACT_ALL=NO
<doxygen:param>EXTRACT_PRIVATE=NO
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
<doxygen:param>MACRO_EXPANSION=YES
<doxygen:param>"PREDEFINED= \\
BOOST_UTILITY_DOCS \\
BOOST_SYMBOL_VISIBLE= \\
BOOST_FORCEINLINE=inline \\
BOOST_GPU_ENABLED= \\
BOOST_STATIC_ASSERT(x)= \\
BOOST_STATIC_ASSERT_MSG(x,y)= \\
BOOST_STATIC_CONSTANT(x,y)=\"static constexpr x y\" \\
BOOST_RV_REF(x)=\"x&&\" \\
BOOST_NESTED_TEMPLATE=template \\
BOOST_CONSTEXPR=constexpr \\
BOOST_CXX14_CONSTEXPR=constexpr \\
BOOST_OPERATORS_CONSTEXPR=constexpr \\
BOOST_CONSTEXPR_OR_CONST=constexpr \\
BOOST_NOEXCEPT=noexcept \\
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
BOOST_DELETED_FUNCTION(x)=\"x = delete;\" \\
BOOST_EXPLICIT_OPERATOR_BOOL()=\"explicit operator bool() const;\" \\
BOOST_REF_CONST=const"
<doxygen:param>"EXCLUDE_SYMBOLS=detail \\
F \\
result_of_has_result_type_impl \\
conditional \\
boost::operators_impl"
;
doxygen in_place_factory_reference
:
[ glob ../include/boost/utility/in_place_factory.hpp ../include/boost/utility/typed_in_place_factory.hpp ]
:
<doxygen:param>ENABLE_PREPROCESSING=YES
<doxygen:param>EXPAND_ONLY_PREDEF=YES
<doxygen:param>EXTRACT_ALL=NO
<doxygen:param>EXTRACT_PRIVATE=NO
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
<doxygen:param>MACRO_EXPANSION=YES
<doxygen:param>"PREDEFINED= \\
BOOST_UTILITY_DOCS \\
BOOST_SYMBOL_VISIBLE= \\
BOOST_FORCEINLINE=inline \\
BOOST_GPU_ENABLED= \\
BOOST_STATIC_ASSERT(x)= \\
BOOST_STATIC_ASSERT_MSG(x,y)= \\
BOOST_STATIC_CONSTANT(x,y)=\"static constexpr x y\" \\
BOOST_RV_REF(x)=\"x&&\" \\
BOOST_NESTED_TEMPLATE=template \\
BOOST_CONSTEXPR=constexpr \\
BOOST_CXX14_CONSTEXPR=constexpr \\
BOOST_OPERATORS_CONSTEXPR=constexpr \\
BOOST_CONSTEXPR_OR_CONST=constexpr \\
BOOST_NOEXCEPT=noexcept \\
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
BOOST_DELETED_FUNCTION(x)=\"x = delete;\" \\
BOOST_EXPLICIT_OPERATOR_BOOL()=\"explicit operator bool() const;\" \\
BOOST_REF_CONST=const"
<doxygen:param>"EXCLUDE_SYMBOLS=detail \\
F \\
result_of_has_result_type_impl \\
conditional \\
boost::operators_impl"
;
# we skip operators_reference because operators.hpp is not adapted for doxygen
doxygen result_of_reference
:
[ glob ../include/boost/utility/result_of.hpp ]
:
<doxygen:param>ENABLE_PREPROCESSING=YES
<doxygen:param>EXPAND_ONLY_PREDEF=YES
<doxygen:param>EXTRACT_ALL=NO
<doxygen:param>EXTRACT_PRIVATE=NO
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
<doxygen:param>MACRO_EXPANSION=YES
<doxygen:param>"PREDEFINED= \\
BOOST_UTILITY_DOCS \\
BOOST_SYMBOL_VISIBLE= \\
BOOST_FORCEINLINE=inline \\
BOOST_GPU_ENABLED= \\
BOOST_STATIC_ASSERT(x)= \\
BOOST_STATIC_ASSERT_MSG(x,y)= \\
BOOST_STATIC_CONSTANT(x,y)=\"static constexpr x y\" \\
BOOST_RV_REF(x)=\"x&&\" \\
BOOST_NESTED_TEMPLATE=template \\
BOOST_CONSTEXPR=constexpr \\
BOOST_CXX14_CONSTEXPR=constexpr \\
BOOST_OPERATORS_CONSTEXPR=constexpr \\
BOOST_CONSTEXPR_OR_CONST=constexpr \\
BOOST_NOEXCEPT=noexcept \\
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
BOOST_DELETED_FUNCTION(x)=\"x = delete;\" \\
BOOST_EXPLICIT_OPERATOR_BOOL()=\"explicit operator bool() const;\" \\
BOOST_REF_CONST=const"
<doxygen:param>"EXCLUDE_SYMBOLS=detail \\
F \\
result_of_has_result_type_impl \\
conditional \\
boost::operators_impl"
;
doxygen string_view_reference
:
[ glob ../include/boost/utility/string_view.hpp ]
:
<doxygen:param>ENABLE_PREPROCESSING=YES
<doxygen:param>EXPAND_ONLY_PREDEF=YES
<doxygen:param>EXTRACT_ALL=NO
<doxygen:param>EXTRACT_PRIVATE=NO
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
<doxygen:param>MACRO_EXPANSION=YES
<doxygen:param>"PREDEFINED= \\
BOOST_UTILITY_DOCS \\
BOOST_SYMBOL_VISIBLE= \\
BOOST_FORCEINLINE=inline \\
BOOST_GPU_ENABLED= \\
BOOST_STATIC_ASSERT(x)= \\
BOOST_STATIC_ASSERT_MSG(x,y)= \\
BOOST_STATIC_CONSTANT(x,y)=\"static constexpr x y\" \\
BOOST_RV_REF(x)=\"x&&\" \\
BOOST_NESTED_TEMPLATE=template \\
BOOST_CONSTEXPR=constexpr \\
BOOST_CXX14_CONSTEXPR=constexpr \\
BOOST_OPERATORS_CONSTEXPR=constexpr \\
BOOST_CONSTEXPR_OR_CONST=constexpr \\
BOOST_NOEXCEPT=noexcept \\
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
BOOST_DELETED_FUNCTION(x)=\"x = delete;\" \\
BOOST_EXPLICIT_OPERATOR_BOOL()=\"explicit operator bool() const;\" \\
BOOST_REF_CONST=const"
<doxygen:param>"EXCLUDE_SYMBOLS=detail \\
F \\
result_of_has_result_type_impl \\
conditional \\
boost::operators_impl"
;
doxygen value_init_reference
:
[ glob ../include/boost/utility/value_init.hpp ]
:
<doxygen:param>ENABLE_PREPROCESSING=YES
<doxygen:param>EXPAND_ONLY_PREDEF=YES
<doxygen:param>EXTRACT_ALL=NO
<doxygen:param>EXTRACT_PRIVATE=NO
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
<doxygen:param>MACRO_EXPANSION=YES
<doxygen:param>"PREDEFINED= \\
BOOST_UTILITY_DOCS \\
BOOST_SYMBOL_VISIBLE= \\
BOOST_FORCEINLINE=inline \\
BOOST_GPU_ENABLED= \\
BOOST_STATIC_ASSERT(x)= \\
BOOST_STATIC_ASSERT_MSG(x,y)= \\
BOOST_STATIC_CONSTANT(x,y)=\"static constexpr x y\" \\
BOOST_RV_REF(x)=\"x&&\" \\
BOOST_NESTED_TEMPLATE=template \\
BOOST_CONSTEXPR=constexpr \\
BOOST_CXX14_CONSTEXPR=constexpr \\
BOOST_OPERATORS_CONSTEXPR=constexpr \\
BOOST_CONSTEXPR_OR_CONST=constexpr \\
BOOST_NOEXCEPT=noexcept \\
BOOST_NOEXCEPT_IF(x)=noexcept(x) \\
BOOST_NOEXCEPT_OR_NOTHROW=noexcept \\
BOOST_COPY_ASSIGN_REF(x)=\"x const&\" \\
BOOST_DEFAULTED_FUNCTION(x,y)=\"x = default;\" \\
BOOST_DELETED_FUNCTION(x)=\"x = delete;\" \\
BOOST_EXPLICIT_OPERATOR_BOOL()=\"explicit operator bool() const;\" \\
BOOST_REF_CONST=const"
<doxygen:param>"EXCLUDE_SYMBOLS=detail \\
F \\
result_of_has_result_type_impl \\
conditional \\
boost::operators_impl"
;
xml main : main.qbk ;
boostbook standalone_main
: :
string_ref main
: :
<dependency>base_from_member_reference
<dependency>boost_binary_reference
<dependency>call_traits_reference
<dependency>compressed_pair_reference
<dependency>in_place_factory_reference
<dependency>result_of_reference
<dependency>string_view_reference
<dependency>value_init_reference
# File name of HTML output: # File name of HTML output:
<xsl:param>root.filename=string_ref # <xsl:param>root.filename=main
# How far down we chunk nested sections, basically all of them: <xsl:param>boost.root=../../../..
<xsl:param>chunk.section.depth=0 <format>pdf:<xsl:param>boost.url.prefix="http://www.boost.org/doc/libs/release/libs/core/doc/html"
# How far down we chunk nested sections: no more than two so utility component pages include their reference
<xsl:param>chunk.section.depth=2 # 8
# Don't put the first section on the same page as the TOC: # Don't put the first section on the same page as the TOC:
<xsl:param>chunk.first.sections=0 <xsl:param>chunk.first.sections=1 # 1
# How far down sections get TOC's # How far down sections get TOC: 2 so we show each Utility component in main page but no more than that
<xsl:param>toc.section.depth=1 <xsl:param>toc.section.depth=2 # 2
# Max depth in each TOC: # Max depth in each TOC: 2 so we show each Utility component in main page but no more than that
<xsl:param>toc.max.depth=1 <xsl:param>toc.max.depth=2 # 2
# How far down we go with TOC's # How far down we go with TOC's in main page: 2 so each Utility component page has 1 level TOC
<xsl:param>generate.section.toc.level=1 <xsl:param>generate.section.toc.level=2 # 2
; ;
############################################################################### ###############################################################################
alias boostdoc ; alias boostdoc ;
explicit boostdoc ; explicit boostdoc ;
alias boostrelease : alias boostrelease :
standalone_base_from_member standalone_compressed_pair standalone_main ;
standalone_declval standalone_string_ref ; explicit boostrelease ;
explicit boostrelease ;

View File

@ -11,7 +11,7 @@
[section:base_from_member Base from Member] [section:base_from_member Base from Member]
[block'''<?dbhtml stop-chunking?>'''] [block'''<?dbhtml stop-chunking?>''']
[heading Introduction] [section Introduction]
The class templates __base_from_member__ support the base-from-member idiom. The class templates __base_from_member__ support the base-from-member idiom.
When developing a class, sometimes a base class needs to be initialized When developing a class, sometimes a base class needs to be initialized
@ -101,7 +101,9 @@ This parameter has a default value so a single use of a particular member
type does not need to concern itself with the integer. type does not need to concern itself with the integer.
[heading Synopsis] [endsect]
[section Synopsis]
#include <type_traits> /* exposition only */ #include <type_traits> /* exposition only */
@ -191,7 +193,9 @@ this class template as a base class for a member with a flexible set of
constructors.) This constant is ignored when C++11 features are present. constructors.) This constant is ignored when C++11 features are present.
[heading Basic Usage] [endsect]
[section Basic Usage]
With the starting example, the `fdoutbuf` sub-object needs to be With the starting example, the `fdoutbuf` sub-object needs to be
encapsulated in a base class that is inherited before `__std_ostream__`. encapsulated in a base class that is inherited before `__std_ostream__`.
@ -234,7 +238,9 @@ sub-object of the final type is the only sub-object with the name `member`
that name can be used unqualified within the final class. that name can be used unqualified within the final class.
[heading Multiple Sub-Objects] [endsect]
[section Multiple Sub-Objects]
The base-from-member class templates should commonly involve only one The base-from-member class templates should commonly involve only one
base-from-member sub-object, usually for attaching a stream-buffer to an base-from-member sub-object, usually for attaching a stream-buffer to an
@ -336,7 +342,13 @@ The last conversion is necessary for the compiler to call a constructor form
__nullptr__ is used, it still needs a conversion if multiple pointer types can __nullptr__ is used, it still needs a conversion if multiple pointer types can
be accepted in a constructor call but `__std_nullptr_t__` cannot.) be accepted in a constructor call but `__std_nullptr_t__` cannot.)
[heading Acknowledgments] [endsect]
[/===============]
[xinclude base_from_member_reference.xml]
[/===============]
[section Acknowledgments]
Author: Walker, Daryle Author: Walker, Daryle
@ -363,3 +375,5 @@ base_from_member_test.cpp].
[endsect] [endsect]
[endsect]

View File

@ -10,7 +10,7 @@
[section Call Traits] [section Call Traits]
[/===============] [/===============]
[heading Introduction] [section Introduction]
All of the contents of [@../../../include/boost/call_traits.hpp `<boost/call_traits.hpp>`] are All of the contents of [@../../../include/boost/call_traits.hpp `<boost/call_traits.hpp>`] are
defined inside `namespace boost`. defined inside `namespace boost`.
@ -118,7 +118,8 @@ Notes:
otherwise unchanged (requires partial specialization). otherwise unchanged (requires partial specialization).
[heading Copy constructibility] [endsect]
[section Copy constructibility]
The following table defines which __call_traits__ types can always The following table defines which __call_traits__ types can always
be copy-constructed from which other types: be copy-constructed from which other types:
@ -142,9 +143,10 @@ If `T` is an assignable type the following assignments are possible:
[[From `const_reference`] [Yes] [Yes] [-] [-] [-]] [[From `const_reference`] [Yes] [Yes] [-] [-] [-]]
[[From `param_type`] [Yes] [Yes] [-] [-] [-]] [[From `param_type`] [Yes] [Yes] [-] [-] [-]]
] ]
[endsect]
[#sec:examples] [#sec:examples]
[heading Examples] [section Examples]
The following table shows the effect that __call_traits__ has on The following table shows the effect that __call_traits__ has on
various types. various types.
@ -165,7 +167,7 @@ specialization: if it does not then all types behave in
the same way as the entry for "`my_class`", and the same way as the entry for "`my_class`", and
__call_traits__ can not be used with reference or array types. __call_traits__ can not be used with reference or array types.
[heading Example 1:] [section Example 1:]
The following class is a trivial class that stores some type `T` The following class is a trivial class that stores some type `T`
by value (see the [@../../../test/call_traits_test.cpp `call_traits_test.cpp`] by value (see the [@../../../test/call_traits_test.cpp `call_traits_test.cpp`]
@ -200,9 +202,10 @@ struct contained
}; };
``` ```
[endsect]
[#sec:refs] [#sec:refs]
[heading Example 2 (the reference to reference problem):] [section Example 2 (the reference to reference problem):]
Consider the definition of __std_binder1st__: Consider the definition of __std_binder1st__:
@ -236,8 +239,10 @@ Now in the case that `Operation::second_argument_type`
is a reference type, the argument is passed as a reference, and is a reference type, the argument is passed as a reference, and
the no "reference to reference" occurs. the no "reference to reference" occurs.
[endsect]
[#sec:example3] [#sec:example3]
[heading Example 3 (the `make_pair` problem):] [section Example 3 (the `make_pair` problem):]
If we pass the name of an array as one (or both) arguments to `__std_make_pair__`, If we pass the name of an array as one (or both) arguments to `__std_make_pair__`,
then template argument deduction deduces the passed parameter as then template argument deduction deduces the passed parameter as
@ -270,9 +275,10 @@ principle in any function that "wraps" a temporary
whose type is deduced. Note that the function arguments to whose type is deduced. Note that the function arguments to
__std_make_pair__ are not expressed in terms of __call_traits__: doing so __std_make_pair__ are not expressed in terms of __call_traits__: doing so
would prevent template argument deduction from functioning. would prevent template argument deduction from functioning.
[endsect]
[#sec:example4] [#sec:example4]
[heading Example 4 (optimising fill):] [section Example 4 (optimising fill):]
The __call_traits__ template will "optimize" the passing The __call_traits__ template will "optimize" the passing
of a small built-in type as a function parameter. This mainly has of a small built-in type as a function parameter. This mainly has
@ -339,7 +345,10 @@ deduction, the compiler will optimise away the call to fill all
together, replacing it with the call to `filler<>::do_fill`, together, replacing it with the call to `filler<>::do_fill`,
which does use __call_traits__. which does use __call_traits__.
[heading Rationale] [endsect]
[endsect]
[section Rationale]
The following notes are intended to briefly describe the The following notes are intended to briefly describe the
rationale behind choices made in __call_traits__. rationale behind choices made in __call_traits__.
@ -427,6 +436,13 @@ specialisation.
[endsect] [endsect]
[/===============]
[xinclude call_traits_reference.xml]
[/===============]
[endsect]

View File

@ -10,7 +10,7 @@
[section Compressed Pair] [section Compressed Pair]
[heading Introduction] [section Introduction]
All of the contents of [@../../../include/boost/compressed_pair.hpp `<boost/compressed_pair.hpp>`] are defined inside All of the contents of [@../../../include/boost/compressed_pair.hpp `<boost/compressed_pair.hpp>`] are defined inside
`namespace boost`. `namespace boost`.
@ -20,7 +20,9 @@ the template arguments are empty classes, then the
[@https://en.cppreference.com/w/cpp/language/ebo ['empty base-class optimisation]] [@https://en.cppreference.com/w/cpp/language/ebo ['empty base-class optimisation]]
is applied to compress the size of the pair. is applied to compress the size of the pair.
[heading Synopsis] [endsect]
[section Synopsis]
```cpp ```cpp
template <class T1, class T2> template <class T1, class T2>
@ -78,7 +80,13 @@ empty type, then assigning to that member will produce memory corruption,
unless the empty type has a "do nothing" assignment operator defined. This unless the empty type has a "do nothing" assignment operator defined. This
is due to a bug in the way VC6 generates implicit assignment operators. is due to a bug in the way VC6 generates implicit assignment operators.
[heading Acknowledgments] [endsect]
[/===============]
[xinclude compressed_pair_reference.xml]
[/===============]
[section Acknowledgments]
Based on contributions by Steve Cleary, Beman Dawes, Howard Hinnant and Based on contributions by Steve Cleary, Beman Dawes, Howard Hinnant and
John Maddock. John Maddock.
@ -86,3 +94,5 @@ John Maddock.
Maintained by [@mailto:john@johnmaddock.co.uk John Maddock]. Maintained by [@mailto:john@johnmaddock.co.uk John Maddock].
[endsect] [endsect]
[endsect]

View File

@ -11,7 +11,7 @@
[section In-place Factory] [section In-place Factory]
[/===============] [/===============]
[heading Introduction] [section Introduction]
Suppose we have a class Suppose we have a class
@ -88,7 +88,8 @@ void foo()
Clearly, this solution does not scale well since the container must duplicate all the constructor overloads Clearly, this solution does not scale well since the container must duplicate all the constructor overloads
from the contained type, or at least all those which are to be supported directly in the container. from the contained type, or at least all those which are to be supported directly in the container.
[heading Framework] [endsect]
[section Framework]
This library proposes a framework to allow some containers to directly construct contained objects in-place without requiring This library proposes a framework to allow some containers to directly construct contained objects in-place without requiring
the entire set of constructor overloads from the contained type. It also allows the container to remove the __CopyConstructible__ the entire set of constructor overloads from the contained type. It also allows the container to remove the __CopyConstructible__
@ -141,7 +142,8 @@ void foo()
``` ```
[heading Specification] [endsect]
[section Specification]
The following is the first member of the family of `InPlaceFactory` classes, along with its corresponding helper template function. The following is the first member of the family of `InPlaceFactory` classes, along with its corresponding helper template function.
The rest of the family varies only in the number and type of template and constructor parameters. The rest of the family varies only in the number and type of template and constructor parameters.
@ -220,7 +222,8 @@ However, if the container holds heterogeneous or polymorphic objects, such as th
the dynamic-type of the object to be constructed must be known by the factory. In this case, end users must use a `typed_in_place_factory` the dynamic-type of the object to be constructed must be known by the factory. In this case, end users must use a `typed_in_place_factory`
instead. instead.
[heading Container-side Usage] [endsect]
[section Container-side Usage]
As shown in the introductory simplified example, the container class must contain methods that accept an instance of As shown in the introductory simplified example, the container class must contain methods that accept an instance of
these factories and pass the object's storage to the factory's apply method. these factories and pass the object's storage to the factory's apply method.
@ -270,7 +273,8 @@ struct C
}; };
``` ```
[heading User-side Usage] [endsect]
[section User-side Usage]
End users pass to the container an instance of a factory object holding the actual parameters needed to construct the End users pass to the container an instance of a factory object holding the actual parameters needed to construct the
contained object directly within the container. For this, the helper template function `in_place` is used. contained object directly within the container. For this, the helper template function `in_place` is used.
@ -289,11 +293,19 @@ void foo()
``` ```
[heading Acknowledgments] [endsect]
[/===============]
[#boost.typed_in_place_factory_base]
[xinclude in_place_factory_reference.xml]
[/===============]
[section Acknowledgments]
Copyright Fernando Luis Cacciola Carballal, 2004 Copyright Fernando Luis Cacciola Carballal, 2004
[endsect] [endsect]
[endsect]

View File

@ -50,114 +50,116 @@
[def __Swappable__ [@https://en.cppreference.com/w/cpp/named_req/Swappable ['Swappable]]] [def __Swappable__ [@https://en.cppreference.com/w/cpp/named_req/Swappable ['Swappable]]]
[/ Boost types ] [/ Boost types ]
[/ (Macros are defined here because these macros are often referenced in other components) ]
[/ (operators macros link to the a table of operators because there's no doxygen reference for the operators) ]
[def __BOOST_BINARY__ [link sec:BOOST_BINARY `BOOST_BINARY`]] [def __BOOST_BINARY__ [link sec:BOOST_BINARY `BOOST_BINARY`]]
[def __in_place_factory__ [link sec:in_place_factory `in_place_factory`]] [def __in_place_factory__ [link sec:in_place_factory `in_place_factory`]]
[def __boost_base_from_member__ [link utility.index_and_ref.ref.boost__base_from_member `boost::base_from_member`]] [def __boost_base_from_member__ [link boost.base_from_member `boost::base_from_member`]]
[def __boost_call_traits__ [link utility.index_and_ref.ref.boost__call_traits `boost::call_traits`]] [def __boost_call_traits__ [link boost.call_traits `boost::call_traits`]]
[def __boost_result_of__ [link utility.index_and_ref.ref.boost__result_of `boost::result_of`]] [def __boost_result_of__ [link boost.result_of `boost::result_of`]]
[def __boost_tr1_result_of__ [link utility.index_and_ref.ref.boost__tr1_result_of `boost::tr1_result_of`]] [def __boost_tr1_result_of__ [link boost.tr1_result_of `boost::tr1_result_of`]]
[def __boost_string_view__ [link utility.index_and_ref.ref.boost__string_view `boost::string_view`]] [def __boost_string_view__ [link boost.basic_string_view `boost::string_view`]]
[def __boost_basic_string_view__ [link utility.index_and_ref.ref.boost__basic_string_view `boost::basic_string_view`]] [def __boost_basic_string_view__ [link boost.basic_string_view `boost::basic_string_view`]]
[def __additive1__ [link utility.index_and_ref.ref.boost__additive1 `additive1`]] [def __additive1__ [link sec:arithmetic `additive1`]]
[def __additive2__ [link utility.index_and_ref.ref.boost__additive2 `additive2`]] [def __additive2__ [link sec:arithmetic `additive2`]]
[def __arithmetic1__ [link utility.index_and_ref.ref.boost__arithmetic1 `arithmetic1`]] [def __arithmetic1__ [link sec:arithmetic `arithmetic1`]]
[def __arithmetic2__ [link utility.index_and_ref.ref.boost__arithmetic2 `arithmetic2`]] [def __arithmetic2__ [link sec:arithmetic `arithmetic2`]]
[def __base_from_member__ [link utility.index_and_ref.ref.boost__base_from_member `base_from_member`]] [def __base_from_member__ [link boost.base_from_member `base_from_member`]]
[def __basic_string_ref__ [link utility.index_and_ref.ref.boost__basic_string_ref `basic_string_ref`]] [def __basic_string_ref__ [link boost.basic_string_view `basic_string_ref`]]
[def __basic_string_view__ [link utility.index_and_ref.ref.boost__basic_string_view `basic_string_view`]] [def __basic_string_view__ [link boost.basic_string_view `basic_string_view`]]
[def __bidirectional_iteratable__ [link utility.index_and_ref.ref.boost__bidirectional_iteratable `bidirectional_iteratable`]] [def __bidirectional_iteratable__ [link sec:arithmetic `bidirectional_iteratable`]]
[def __bidirectional_iterator_helper__ [link utility.index_and_ref.ref.boost__bidirectional_iterator_helper `bidirectional_iterator_helper`]] [def __bidirectional_iterator_helper__ [link sec:arithmetic `bidirectional_iterator_helper`]]
[def __bitwise1__ [link utility.index_and_ref.ref.boost__bitwise1 `bitwise1`]] [def __bitwise1__ [link sec:arithmetic `bitwise1`]]
[def __bitwise2__ [link utility.index_and_ref.ref.boost__bitwise2 `bitwise2`]] [def __bitwise2__ [link sec:arithmetic `bitwise2`]]
[def __call_traits__ [link utility.index_and_ref.ref.boost__call_traits `call_traits`]] [def __call_traits__ [link boost.call_traits `call_traits`]]
[def __call_traits_T__ [link utility.index_and_ref.ref.boost__call_traits `call_traits<T>`]] [def __call_traits_T__ [link boost.call_traits `call_traits<T>`]]
[def __call_traits_lt__T___ [link utility.index_and_ref.ref.boost__call_traits_lt__T_ `call_traits<T&>`]] [def __call_traits_lt__T___ [link boost.call_traits `call_traits<T&>`]]
[def __call_traits_lt__T_lb_N_rb__gt___ [link utility.index_and_ref.ref.boost__call_traits_lt__T_lb_N_rb__gt_ `call_traits< T[N]>`]] [def __call_traits_lt__T_lb_N_rb__gt___ [link boost.call_traits `call_traits< T[N]>`]]
[def __call_traits_lt__const_T_lb_N_rb__gt___ [link utility.index_and_ref.ref.boost__call_traits_lt__const_T_lb_N_rb__gt_ `call_traits< const T[N]>`]] [def __call_traits_lt__const_T_lb_N_rb__gt___ [link boost.call_traits `call_traits< const T[N]>`]]
[def __compressed_pair__ [link utility.index_and_ref.ref.boost__compressed_pair `compressed_pair`]] [def __compressed_pair__ [link boost.compressed_pair `compressed_pair`]]
[def __decrementable__ [link utility.index_and_ref.ref.boost__decrementable `decrementable`]] [def __decrementable__ [link sec:arithmetic `decrementable`]]
[def __dereferenceable__ [link utility.index_and_ref.ref.boost__dereferenceable `dereferenceable`]] [def __dereferenceable__ [link sec:arithmetic `dereferenceable`]]
[def __equal_pointees__ [link utility.index_and_ref.ref.boost__equal_pointees `equal_pointees`]] [def __equal_pointees__ [link sec:arithmetic `equal_pointees`]]
[def __equal_pointees_t__ [link utility.index_and_ref.ref.boost__equal_pointees_t `equal_pointees_t`]] [def __equal_pointees_t__ [link sec:arithmetic `equal_pointees_t`]]
[def __equality_comparable1__ [link utility.index_and_ref.ref.boost__equality_comparable1 `equality_comparable1`]] [def __equality_comparable1__ [link sec:arithmetic `equality_comparable1`]]
[def __equality_comparable2__ [link utility.index_and_ref.ref.boost__equality_comparable2 `equality_comparable2`]] [def __equality_comparable2__ [link sec:arithmetic `equality_comparable2`]]
[def __equivalent1__ [link utility.index_and_ref.ref.boost__equivalent1 `equivalent1`]] [def __equivalent1__ [link sec:arithmetic `equivalent1`]]
[def __equivalent2__ [link utility.index_and_ref.ref.boost__equivalent2 `equivalent2`]] [def __equivalent2__ [link sec:arithmetic `equivalent2`]]
[def __euclidean_ring_operators1__ [link utility.index_and_ref.ref.boost__euclidean_ring_operators1 `euclidean_ring_operators1`]] [def __euclidean_ring_operators1__ [link sec:arithmetic `euclidean_ring_operators1`]]
[def __euclidean_ring_operators2__ [link utility.index_and_ref.ref.boost__euclidean_ring_operators2 `euclidean_ring_operators2`]] [def __euclidean_ring_operators2__ [link sec:arithmetic `euclidean_ring_operators2`]]
[def __field_operators1__ [link utility.index_and_ref.ref.boost__field_operators1 `field_operators1`]] [def __field_operators1__ [link sec:arithmetic `field_operators1`]]
[def __field_operators2__ [link utility.index_and_ref.ref.boost__field_operators2 `field_operators2`]] [def __field_operators2__ [link sec:arithmetic `field_operators2`]]
[def __forward_iteratable__ [link utility.index_and_ref.ref.boost__forward_iteratable `forward_iteratable`]] [def __forward_iteratable__ [link sec:arithmetic `forward_iteratable`]]
[def __forward_iterator_helper__ [link utility.index_and_ref.ref.boost__forward_iterator_helper `forward_iterator_helper`]] [def __forward_iterator_helper__ [link sec:arithmetic `forward_iterator_helper`]]
[def __get__ [link utility.index_and_ref.ref.boost__get `get`]] [def __get__ [link boost.get `get`]]
[def __hash_range__ [link utility.index_and_ref.ref.boost__hash_range `hash_range`]] [def __hash_range__ [link boost.hash_range `hash_range`]]
[def __hash_value__ [link utility.index_and_ref.ref.boost__hash_value `hash_value`]] [def __hash_value__ [link boost.hash_value `hash_value`]]
[def __in_place_factory_base__ [link utility.index_and_ref.ref.boost__in_place_factory_base `in_place_factory_base`]] [def __in_place_factory_base__ [link boost.in_place_factory_base `in_place_factory_base`]]
[def __incrementable__ [link utility.index_and_ref.ref.boost__incrementable `incrementable`]] [def __incrementable__ [link sec:arithmetic `incrementable`]]
[def __indexable__ [link utility.index_and_ref.ref.boost__indexable `indexable`]] [def __indexable__ [link sec:arithmetic `indexable`]]
[def __initialized__ [link utility.index_and_ref.ref.boost__initialized `initialized`]] [def __initialized__ [link boost.initialized `initialized`]]
[def __initialized_value__ [link utility.index_and_ref.ref.boost__initialized_value `initialized_value`]] [def __initialized_value__ [link boost.initialized_value `initialized_value`]]
[def __initialized_value_t__ [link utility.index_and_ref.ref.boost__initialized_value_t `initialized_value_t`]] [def __initialized_value_t__ [link boost.initialized_value_t `initialized_value_t`]]
[def __input_iteratable__ [link utility.index_and_ref.ref.boost__input_iteratable `input_iteratable`]] [def __input_iteratable__ [link sec:arithmetic `input_iteratable`]]
[def __input_iterator_helper__ [link utility.index_and_ref.ref.boost__input_iterator_helper `input_iterator_helper`]] [def __input_iterator_helper__ [link sec:arithmetic `input_iterator_helper`]]
[def __integer_arithmetic1__ [link utility.index_and_ref.ref.boost__integer_arithmetic1 `integer_arithmetic1`]] [def __integer_arithmetic1__ [link sec:arithmetic `integer_arithmetic1`]]
[def __integer_arithmetic2__ [link utility.index_and_ref.ref.boost__integer_arithmetic2 `integer_arithmetic2`]] [def __integer_arithmetic2__ [link sec:arithmetic `integer_arithmetic2`]]
[def __integer_multiplicative1__ [link utility.index_and_ref.ref.boost__integer_multiplicative1 `integer_multiplicative1`]] [def __integer_multiplicative1__ [link sec:arithmetic `integer_multiplicative1`]]
[def __integer_multiplicative2__ [link utility.index_and_ref.ref.boost__integer_multiplicative2 `integer_multiplicative2`]] [def __integer_multiplicative2__ [link sec:arithmetic `integer_multiplicative2`]]
[def __is_chained_base__ [link utility.index_and_ref.ref.boost__is_chained_base `is_chained_base`]] [def __is_chained_base__ [link sec:arithmetic `is_chained_base`]]
[def __less_pointees__ [link utility.index_and_ref.ref.boost__less_pointees `less_pointees`]] [def __less_pointees__ [link boost.less_pointees `less_pointees`]]
[def __less_pointees_t__ [link utility.index_and_ref.ref.boost__less_pointees_t `less_pointees_t`]] [def __less_pointees_t__ [link boost.less_pointees_t `less_pointees_t`]]
[def __less_than_comparable1__ [link utility.index_and_ref.ref.boost__less_than_comparable1 `less_than_comparable1`]] [def __less_than_comparable1__ [link sec:arithmetic `less_than_comparable1`]]
[def __less_than_comparable2__ [link utility.index_and_ref.ref.boost__less_than_comparable2 `less_than_comparable2`]] [def __less_than_comparable2__ [link sec:arithmetic `less_than_comparable2`]]
[def __multiplicative1__ [link utility.index_and_ref.ref.boost__multiplicative1 `multiplicative1`]] [def __multiplicative1__ [link sec:arithmetic `multiplicative1`]]
[def __multiplicative2__ [link utility.index_and_ref.ref.boost__multiplicative2 `multiplicative2`]] [def __multiplicative2__ [link sec:arithmetic `multiplicative2`]]
[def __operator_eq__eq__ [link utility.index_and_ref.ref.boost__operator_eq__eq_ `operator==`]] [def __operator_eq__eq__ [link sec:arithmetic `operator==`]]
[def __operator_gt__ [link utility.index_and_ref.ref.boost__operator_gt_ `operator_gt_`]] [def __operator_gt__ [link sec:arithmetic `operator_gt_`]]
[def __operator_gt__eq__ [link utility.index_and_ref.ref.boost__operator_gt__eq_ `operator&gt;`]] [def __operator_gt__eq__ [link sec:arithmetic `operator&gt;`]]
[def __operator_lt__ [link utility.index_and_ref.ref.boost__operator_lt_ `operator&lt;`]] [def __operator_lt__ [link sec:arithmetic `operator&lt;`]]
[def __operator_lt__eq__ [link utility.index_and_ref.ref.boost__operator_lt__eq_ `operator&lt;=`]] [def __operator_lt__eq__ [link sec:arithmetic `operator&lt;=`]]
[def __operator_lt__lt__ [link utility.index_and_ref.ref.boost__operator_lt__lt_ `operator&lt;&lt;`]] [def __operator_lt__lt__ [link sec:arithmetic `operator&lt;&lt;`]]
[def __operator_not__eq__ [link utility.index_and_ref.ref.boost__operator_not__eq_ `operator!=`]] [def __operator_not__eq__ [link sec:arithmetic `operator!=`]]
[def __operators2__ [link utility.index_and_ref.ref.boost__operators2 `operators2`]] [def __operators2__ [link sec:arithmetic `operators2`]]
[def __operators__ [link utility.index_and_ref.ref.boost__operators `operators`]] [def __operators__ [link sec:arithmetic `operators`]]
[def __operators_lt_T__ [link utility.index_and_ref.ref.boost__operators_lt_T `operators<T,T>`]] [def __operators_lt_T__ [link sec:arithmetic `operators<T,T>`]]
[def __ordered_euclidean_ring_operators1__ [link utility.index_and_ref.ref.boost__ordered_euclidean_ring_operators1 `ordered_euclidean_ring_operators1`]] [def __ordered_euclidean_ring_operators1__ [link sec:arithmetic `ordered_euclidean_ring_operators1`]]
[def __ordered_euclidean_ring_operators2__ [link utility.index_and_ref.ref.boost__ordered_euclidean_ring_operators2 `ordered_euclidean_ring_operators2`]] [def __ordered_euclidean_ring_operators2__ [link sec:arithmetic `ordered_euclidean_ring_operators2`]]
[def __ordered_euclidian_ring_operators1__ [link utility.index_and_ref.ref.boost__ordered_euclidian_ring_operators1 `ordered_euclidian_ring_operators1`]] [def __ordered_euclidian_ring_operators1__ [link sec:arithmetic `ordered_euclidian_ring_operators1`]]
[def __ordered_euclidian_ring_operators2__ [link utility.index_and_ref.ref.boost__ordered_euclidian_ring_operators2 `ordered_euclidian_ring_operators2`]] [def __ordered_euclidian_ring_operators2__ [link sec:arithmetic `ordered_euclidian_ring_operators2`]]
[def __ordered_field_operators1__ [link utility.index_and_ref.ref.boost__ordered_field_operators1 `ordered_field_operators1`]] [def __ordered_field_operators1__ [link sec:arithmetic `ordered_field_operators1`]]
[def __ordered_field_operators2__ [link utility.index_and_ref.ref.boost__ordered_field_operators2 `ordered_field_operators2`]] [def __ordered_field_operators2__ [link sec:arithmetic `ordered_field_operators2`]]
[def __ordered_ring_operators1__ [link utility.index_and_ref.ref.boost__ordered_ring_operators1 `ordered_ring_operators1`]] [def __ordered_ring_operators1__ [link sec:arithmetic `ordered_ring_operators1`]]
[def __ordered_ring_operators2__ [link utility.index_and_ref.ref.boost__ordered_ring_operators2 `ordered_ring_operators2`]] [def __ordered_ring_operators2__ [link sec:arithmetic `ordered_ring_operators2`]]
[def __output_iteratable__ [link utility.index_and_ref.ref.boost__output_iteratable `output_iteratable`]] [def __output_iteratable__ [link sec:arithmetic `output_iteratable`]]
[def __output_iterator_helper__ [link utility.index_and_ref.ref.boost__output_iterator_helper `output_iterator_helper`]] [def __output_iterator_helper__ [link sec:arithmetic `output_iterator_helper`]]
[def __partially_ordered1__ [link utility.index_and_ref.ref.boost__partially_ordered1 `partially_ordered1`]] [def __partially_ordered1__ [link sec:arithmetic `partially_ordered1`]]
[def __partially_ordered2__ [link utility.index_and_ref.ref.boost__partially_ordered2 `partially_ordered2`]] [def __partially_ordered2__ [link sec:arithmetic `partially_ordered2`]]
[def __random_access_iteratable__ [link utility.index_and_ref.ref.boost__random_access_iteratable `random_access_iteratable`]] [def __random_access_iteratable__ [link sec:arithmetic `random_access_iteratable`]]
[def __random_access_iterator_helper__ [link utility.index_and_ref.ref.boost__random_access_iterator_helper `random_access_iterator_helper`]] [def __random_access_iterator_helper__ [link sec:arithmetic `random_access_iterator_helper`]]
[def __result_of__ [link utility.index_and_ref.ref.boost__result_of `result_of`]] [def __result_of__ [link boost.result_of `result_of`]]
[def __ring_operators1__ [link utility.index_and_ref.ref.boost__ring_operators1 `ring_operators1`]] [def __ring_operators1__ [link sec:arithmetic `ring_operators1`]]
[def __ring_operators2__ [link utility.index_and_ref.ref.boost__ring_operators2 `ring_operators2`]] [def __ring_operators2__ [link sec:arithmetic `ring_operators2`]]
[def __shiftable1__ [link utility.index_and_ref.ref.boost__shiftable1 `shiftable1`]] [def __shiftable1__ [link sec:arithmetic `shiftable1`]]
[def __shiftable2__ [link utility.index_and_ref.ref.boost__shiftable2 `shiftable2`]] [def __shiftable2__ [link sec:arithmetic `shiftable2`]]
[def __string_ref__ [link utility.index_and_ref.ref.boost__string_ref `string_ref`]] [def __string_ref__ [link boost.basic_string_view `string_ref`]]
[def __string_view__ [link utility.index_and_ref.ref.boost__string_view `string_view`]] [def __string_view__ [link boost.basic_string_view `string_view`]]
[def __swap__ [link utility.index_and_ref.ref.boost__swap `swap`]] [def __swap__ [link sec:arithmetic `swap`]]
[def __totally_ordered1__ [link utility.index_and_ref.ref.boost__totally_ordered1 `totally_ordered1`]] [def __totally_ordered1__ [link sec:arithmetic `totally_ordered1`]]
[def __totally_ordered2__ [link utility.index_and_ref.ref.boost__totally_ordered2 `totally_ordered2`]] [def __totally_ordered2__ [link sec:arithmetic `totally_ordered2`]]
[def __tr1_result_of__ [link utility.index_and_ref.ref.boost__tr1_result_of `tr1_result_of`]] [def __tr1_result_of__ [link boost.tr1_result_of `tr1_result_of`]]
[def __typed_in_place_factory_base__ [link utility.index_and_ref.ref.boost__typed_in_place_factory_base `typed_in_place_factory_base`]] [def __typed_in_place_factory_base__ [link boost.typed_in_place_factory_base `typed_in_place_factory_base`]]
[def __u16string_ref__ [link utility.index_and_ref.ref.boost__u16string_ref `u16string_ref`]] [def __u16string_ref__ [link boost.basic_string_view `u16string_ref`]]
[def __u16string_view__ [link utility.index_and_ref.ref.boost__u16string_view `u16string_view`]] [def __u16string_view__ [link boost.basic_string_view `u16string_view`]]
[def __u32string_ref__ [link utility.index_and_ref.ref.boost__u32string_ref `u32string_ref`]] [def __u32string_ref__ [link boost.basic_string_view `u32string_ref`]]
[def __u32string_view__ [link utility.index_and_ref.ref.boost__u32string_view `u32string_view`]] [def __u32string_view__ [link boost.basic_string_view `u32string_view`]]
[def __unit_steppable__ [link utility.index_and_ref.ref.boost__unit_steppable `unit_steppable`]] [def __unit_steppable__ [link sec:arithmetic `unit_steppable`]]
[def __value_initialized__ [link utility.index_and_ref.ref.boost__value_initialized `value_initialized`]] [def __value_initialized__ [link boost.value_initialized `value_initialized`]]
[def __wstring_ref__ [link utility.index_and_ref.ref.boost__wstring_ref `wstring_ref`]] [def __wstring_ref__ [link boost.basic_string_view `wstring_ref`]]
[def __wstring_view__ [link utility.index_and_ref.ref.boost__wstring_view `wstring_view`]] [def __wstring_view__ [link boost.basic_string_view `wstring_view`]]
[/ std:: types ] [/ std:: types ]
@ -213,15 +215,16 @@
[include other.qbk] [include other.qbk]
[section:index_and_ref Indexes and Reference]
* [link sec:reference Reference]
* [link utility.index Index]
[#sec:reference] [#sec:reference]
[section:ref Reference] [section:ref Quick Reference]
[/ Reference table ]
[xinclude quickref.xml] [xinclude quickref.xml]
[include reference.qbk]
[endsect] [/ Generated reference files ]
[xinclude index.xml] [/ [include reference.qbk] ]
[/ Generated index ]
[/ [xinclude index.xml] ]
[endsect] [endsect]

View File

@ -11,15 +11,17 @@
[section Operators] [section Operators]
[/===============] [/===============]
[heading Introduction] [section Introduction]
The header [@../../../include/boost/operators.hpp `<boost/operators.hpp>`] supplies The header [@../../../include/boost/operators.hpp `<boost/operators.hpp>`] supplies
several sets of class templates in `namespace boost`. These templates define several sets of class templates in `namespace boost`. These templates define
operators at namespace scope in terms of a minimal number of fundamental operators at namespace scope in terms of a minimal number of fundamental
operators provided by the class. operators provided by the class.
[endsect]
[#sec:rationale] [#sec:rationale]
[heading Rationale] [section Rationale]
Overloaded operators for class types typically occur in groups. If you Overloaded operators for class types typically occur in groups. If you
can write `x + y`, you probably also want to be able to write `x += y`. can write `x + y`, you probably also want to be able to write `x += y`.
@ -90,8 +92,10 @@ semantics of return types of corresponding operators for built-in types
requirements make `operators` library applicable to broader set of requirements make `operators` library applicable to broader set of
target classes from different domains, i.e. eventually more useful. target classes from different domains, i.e. eventually more useful.
[endsect]
[#sec:example] [#sec:example]
[heading Example] [section Example]
This example shows how some of the [link sec:arithmetic arithmetic This example shows how some of the [link sec:arithmetic arithmetic
operator templates] can be used with a geometric point class operator templates] can be used with a geometric point class
@ -145,8 +149,10 @@ const point<float> pi_over_4 = up + right;
const point<float> pi_over_4_normalized = pi_over_4 / length(pi_over_4); const point<float> pi_over_4_normalized = pi_over_4 / length(pi_over_4);
``` ```
[endsect]
[#sec:usage] [#sec:usage]
[heading Usage] [section Usage]
[#sec:two_arg] [#sec:two_arg]
[h5 Two-Argument Template Forms] [h5 Two-Argument Template Forms]
@ -304,8 +310,10 @@ whether they implement all the requirements of those templates, this
shortcut is not portable. Even if this currently works with your shortcut is not portable. Even if this currently works with your
compiler, it may not work later. compiler, it may not work later.
[endsect]
[#sec:arithmetic] [#sec:arithmetic]
[heading Arithmetic Operators] [section Arithmetic Operators]
The arithmetic operator templates ease the task of creating a custom The arithmetic operator templates ease the task of creating a custom
numeric type. Given a core set of operators, the templates add related numeric type. Given a core set of operators, the templates add related
@ -1597,8 +1605,10 @@ program demonstrates the use of the arithmetic operator templates, and
can also be used to verify correct operation. Check the compiler status can also be used to verify correct operation. Check the compiler status
report for the test results with selected platforms. report for the test results with selected platforms.
[endsect]
[#sec:deref] [#sec:deref]
[heading Dereference Operators and Iterator Helpers] [section Dereference Operators and Iterator Helpers]
The [link sec:iterator iterator helper] templates ease the task of The [link sec:iterator iterator helper] templates ease the task of
creating a custom iterator. Similar to arithmetic types, a complete creating a custom iterator. Similar to arithmetic types, a complete
@ -1904,8 +1914,10 @@ public:
Check the [@http://www.boost.org/development/testing.html compiler status report] for the Check the [@http://www.boost.org/development/testing.html compiler status report] for the
test results with selected platforms. test results with selected platforms.
[endsect]
[#sec:old_lib_note] [#sec:old_lib_note]
[heading Note for Users of Older Versions] [section Note for Users of Older Versions]
The [link sec:chaining changes in the library interface and The [link sec:chaining changes in the library interface and
recommended usage] were motivated by some practical issues described recommended usage] were motivated by some practical issues described
@ -1952,8 +1964,10 @@ it's worth it to make the library more useful in real world. Alexy Gurtovoy
contributed the code which supports the new usage idiom while allowing the contributed the code which supports the new usage idiom while allowing the
library to remain backward-compatible. library to remain backward-compatible.
[endsect]
[#sec:contributors] [#sec:contributors]
[heading Acknowledgments] [section Acknowledgments]
* [@http://www.boost.org/people/dave_abrahams.htm Dave Abrahams]: * [@http://www.boost.org/people/dave_abrahams.htm Dave Abrahams]:
Started the library and contributed the arithmetic operators in Started the library and contributed the arithmetic operators in
@ -1984,3 +1998,5 @@ library to remain backward-compatible.
arithmetic operators. arithmetic operators.
[endsect] [endsect]
[endsect]

497
doc/quickref.xml Normal file
View File

@ -0,0 +1,497 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" "../../../tools/boostbook/dtd/boostbook.dtd">
<!--
Copyright (c) 2021, Alan Freitas
Distributed under the Boost Software License, Version 1.0.
See accompanying file LICENSE_1_0.txt
or copy at http://boost.org/LICENSE_1_0.txt
-->
<!-- See also https://tdg.docbook.org/tdg/5.1/ -->
<!-- Doxygen reference -->
<informaltable frame="all">
<tgroup cols="4">
<colspec colname="a"/>
<colspec colname="b"/>
<colspec colname="c"/>
<colspec colname="d"/>
<thead>
<row>
<entry valign="center" namest="a" nameend="a">
<bridgehead renderas="sect2">Base from Member</bridgehead>
</entry>
<entry valign="center" namest="b" nameend="b">
<bridgehead renderas="sect2">Call Traits</bridgehead>
</entry>
<entry valign="center" namest="c" nameend="c">
<bridgehead renderas="sect2">Compressed Pair</bridgehead>
</entry>
<entry valign="center" namest="d" nameend="d">
<bridgehead renderas="sect2">In-place Factory</bridgehead>
</entry>
</row>
</thead>
<tbody>
<row>
<!-- base_from_member -->
<entry valign="top">
<bridgehead renderas="sect3">Classes</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.base_from_member">base_from_member</link>
</member>
</simplelist>
</entry>
<!-- call_traits -->
<entry valign="top">
<bridgehead renderas="sect3">Type Traits</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.call_traits">call_traits</link>
</member>
<member>
<link linkend="boost.call_traits">call_traits&lt;T&amp;&gt;</link>
</member>
<member>
<link linkend="boost.call_traits">call_traits&lt;T[N]&gt;
</link>
</member>
<member>
<link linkend="boost.call_traits">call_traits&lt;const
T[N]&gt;
</link>
</member>
</simplelist>
</entry>
<!-- compressed_pair -->
<entry valign="top">
<bridgehead renderas="sect3">Classes</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.compressed_pair">compressed_pair</link>
</member>
</simplelist>
<bridgehead renderas="sect3">Functions</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="header.boost.detail.compressed_pair_hpp">swap</link>
</member>
</simplelist>
</entry>
<!-- in_place_factory -->
<entry valign="top">
<bridgehead renderas="sect3">Classes</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.in_place_factory_base">in_place_factory_base</link>
</member>
<member>
<link linkend="boost.typed_in_place_factory_base">typed_in_place_factory_base
</link>
</member>
</simplelist>
</entry>
</row>
</tbody>
</tgroup>
<tgroup cols="5">
<colspec colname="a"/>
<colspec colname="b"/>
<colspec colname="c"/>
<colspec colname="d"/>
<colspec colname="e"/>
<thead>
<row>
<entry valign="center" namest="a" nameend="e">
<bridgehead renderas="sect2">Operators</bridgehead>
</entry>
</row>
</thead>
<tbody>
<row>
<entry valign="top">
<!-- 13 classes per cell -->
<bridgehead renderas="sect3">Classes (1 of 5)</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="sec:arithmetic">additive1</link>
</member>
<member>
<link linkend="sec:arithmetic">additive2</link>
</member>
<member>
<link linkend="sec:arithmetic">arithmetic1</link>
</member>
<member>
<link linkend="sec:arithmetic">arithmetic2</link>
</member>
<member>
<link linkend="sec:arithmetic">bidirectional_iteratable</link>
</member>
<member>
<link linkend="sec:arithmetic">
bidirectional_iterator_helper
</link>
</member>
<member>
<link linkend="sec:arithmetic">bitwise1</link>
</member>
<member>
<link linkend="sec:arithmetic">bitwise2</link>
</member>
<member>
<link linkend="sec:arithmetic">decrementable</link>
</member>
<member>
<link linkend="sec:arithmetic">dereferenceable</link>
</member>
<member>
<link linkend="sec:arithmetic">equality_comparable1</link>
</member>
<member>
<link linkend="sec:arithmetic">equality_comparable2</link>
</member>
<member>
<link linkend="sec:arithmetic">equivalent1</link>
</member>
</simplelist>
</entry>
<entry valign="top">
<bridgehead renderas="sect3">Classes (2 of 5)</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="sec:arithmetic">equivalent2</link>
</member>
<member>
<link linkend="sec:arithmetic">euclidean_ring_operators1
</link>
</member>
<member>
<link linkend="sec:arithmetic">euclidean_ring_operators2
</link>
</member>
<member>
<link linkend="sec:arithmetic">field_operators1</link>
</member>
<member>
<link linkend="sec:arithmetic">field_operators2</link>
</member>
<member>
<link linkend="sec:arithmetic">forward_iteratable</link>
</member>
<member>
<link linkend="sec:arithmetic">forward_iterator_helper</link>
</member>
<member>
<link linkend="sec:arithmetic">incrementable</link>
</member>
<member>
<link linkend="sec:arithmetic">indexable</link>
</member>
<member>
<link linkend="sec:arithmetic">input_iteratable</link>
</member>
<member>
<link linkend="sec:arithmetic">input_iterator_helper</link>
</member>
<member>
<link linkend="sec:arithmetic">integer_arithmetic1</link>
</member>
<member>
<link linkend="sec:arithmetic">integer_arithmetic2</link>
</member>
</simplelist>
</entry>
<entry valign="top">
<bridgehead renderas="sect3">Classes (3 of 5)</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="sec:arithmetic">integer_multiplicative1</link>
</member>
<member>
<link linkend="sec:arithmetic">integer_multiplicative2</link>
</member>
<member>
<link linkend="sec:arithmetic">is_chained_base</link>
</member>
<member>
<link linkend="sec:arithmetic">less_than_comparable1</link>
</member>
<member>
<link linkend="sec:arithmetic">less_than_comparable2</link>
</member>
<member>
<link linkend="sec:arithmetic">multiplicative1</link>
</member>
<member>
<link linkend="sec:arithmetic">multiplicative2</link>
</member>
<member>
<link linkend="sec:arithmetic">operators</link>
</member>
<member>
<link linkend="sec:arithmetic">operators2</link>
</member>
<member>
<link linkend="sec:arithmetic">operators&lt;T,T&gt;</link>
</member>
<member>
<link linkend="sec:arithmetic">
ordered_euclidean_ring_operators1
</link>
</member>
<member>
<link linkend="sec:arithmetic">
ordered_euclidean_ring_operators2
</link>
</member>
<member>
<link linkend="sec:arithmetic">
ordered_euclidian_ring_operators1
</link>
</member>
</simplelist>
</entry>
<entry valign="top">
<bridgehead renderas="sect3">Classes (4 of 5)</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="sec:arithmetic">
ordered_euclidian_ring_operators2
</link>
</member>
<member>
<link linkend="sec:arithmetic">ordered_field_operators1</link>
</member>
<member>
<link linkend="sec:arithmetic">ordered_field_operators2</link>
</member>
<member>
<link linkend="sec:arithmetic">ordered_ring_operators1</link>
</member>
<member>
<link linkend="sec:arithmetic">ordered_ring_operators2</link>
</member>
<member>
<link linkend="sec:arithmetic">output_iteratable</link>
</member>
<member>
<link linkend="sec:arithmetic">output_iterator_helper</link>
</member>
<member>
<link linkend="sec:arithmetic">partially_ordered1</link>
</member>
<member>
<link linkend="sec:arithmetic">partially_ordered2</link>
</member>
<member>
<link linkend="sec:arithmetic">random_access_iteratable</link>
</member>
<member>
<link linkend="sec:arithmetic">
random_access_iterator_helper
</link>
</member>
<member>
<link linkend="sec:arithmetic">ring_operators1</link>
</member>
<member>
<link linkend="sec:arithmetic">ring_operators2</link>
</member>
</simplelist>
</entry>
<entry valign="top">
<bridgehead renderas="sect3">Classes (5 of 5)</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="sec:arithmetic">shiftable1</link>
</member>
<member>
<link linkend="sec:arithmetic">shiftable2</link>
</member>
<member>
<link linkend="sec:arithmetic">totally_ordered1</link>
</member>
<member>
<link linkend="sec:arithmetic">totally_ordered2</link>
</member>
<member>
<link linkend="sec:arithmetic">unit_steppable</link>
</member>
</simplelist>
<bridgehead renderas="sect3">Type Traits</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="sec:arithmetic">is_chained_base</link>
</member>
</simplelist>
</entry>
</row>
</tbody>
</tgroup>
<tgroup cols="5">
<colspec colname="a"/>
<colspec colname="b"/>
<colspec colname="c"/>
<colspec colname="d"/>
<colspec colname="e"/>
<thead>
<row>
<entry valign="center" namest="a" nameend="a">
<bridgehead renderas="sect2">Result of</bridgehead>
</entry>
<entry valign="center" namest="b" nameend="d">
<bridgehead renderas="sect2">String View</bridgehead>
</entry>
<entry valign="center" namest="e" nameend="e">
<bridgehead renderas="sect2">Value Init</bridgehead>
</entry>
</row>
</thead>
<tbody>
<row>
<!-- result_of -->
<entry valign="top">
<bridgehead renderas="sect3">Type Traits</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.result_of">result_of</link>
</member>
<member>
<link linkend="boost.tr1_result_of">tr1_result_of</link>
</member>
</simplelist>
</entry>
<!-- string_view -->
<entry valign="top">
<bridgehead renderas="sect3">Aliases</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.basic_string_view">string_view</link>
</member>
<member>
<link linkend="boost.basic_string_view">u16string_ref</link>
</member>
<member>
<link linkend="boost.basic_string_view">u16string_view</link>
</member>
<member>
<link linkend="boost.basic_string_view">u32string_ref</link>
</member>
<member>
<link linkend="boost.basic_string_view">u32string_view</link>
</member>
<member>
<link linkend="boost.basic_string_view">wstring_ref</link>
</member>
<member>
<link linkend="boost.basic_string_view">wstring_view</link>
</member>
<member>
<link linkend="boost.basic_string_view">string_ref</link>
</member>
</simplelist>
</entry>
<entry valign="top">
<bridgehead renderas="sect3">Classes</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.basic_string_view">basic_string_ref</link>
</member>
<member>
<link linkend="boost.basic_string_view">basic_string_view</link>
</member>
</simplelist>
<bridgehead renderas="sect3">Functions</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.hash_range">hash_range</link>
</member>
<member>
<link linkend="boost.hash_value">hash_value</link>
</member>
</simplelist>
</entry>
<entry valign="top">
<bridgehead renderas="sect3">Operators</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="header.boost.utility.string_view_hpp">operator==</link>
</member>
<member>
<link linkend="header.boost.utility.string_view_hpp">operator!=</link>
</member>
<member>
<link linkend="header.boost.utility.string_view_hpp">operator&lt;</link>
</member>
<member>
<link linkend="header.boost.utility.string_view_hpp">operator&lt;=</link>
</member>
<member>
<link linkend="header.boost.utility.string_view_hpp">operator&gt;</link>
</member>
<member>
<link linkend="header.boost.utility.string_view_hpp">operator&gt;=</link>
</member>
<member>
<link linkend="header.boost.utility.string_view_hpp">operator&lt;&lt;</link>
</member>
</simplelist>
</entry>
<!-- value_init -->
<entry valign="top">
<bridgehead renderas="sect3">Classes</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.initialized">initialized</link>
</member>
<member>
<link linkend="boost.initialized_value_t">initialized_value_t</link>
</member>
<member>
<link linkend="boost.value_initialized">value_initialized</link>
</member>
</simplelist>
<bridgehead renderas="sect3">Functions</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="header.boost.utility.value_init_hpp">get</link>
</member>
<member>
<link linkend="header.boost.utility.value_init_hpp">swap</link>
</member>
</simplelist>
<bridgehead renderas="sect3">Constants</bridgehead>
<simplelist type="vert" columns="1">
<member>
<link linkend="boost.initialized_value">initialized_value</link>
</member>
</simplelist>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>

View File

@ -10,7 +10,7 @@
[section Result of] [section Result of]
[/===============] [/===============]
[heading Introduction] [section Introduction]
The class template __result_of__ helps determine the type of a The class template __result_of__ helps determine the type of a
call expression. For example, given an lvalue `f` of type `F` call expression. For example, given an lvalue `f` of type `F`
@ -136,8 +136,10 @@ Technical Report, [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n183
or, for motivation and design rationale, the __result_of__ or, for motivation and design rationale, the __result_of__
[@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1454.html proposal]. [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1454.html proposal].
[endsect]
[#sec:result_of_guidelines] [#sec:result_of_guidelines]
[heading Usage guidelines for __boost_result_of__] [section Usage guidelines for __boost_result_of__]
The following are general suggestions about when and how to use __boost_result_of__. The following are general suggestions about when and how to use __boost_result_of__.
@ -191,8 +193,10 @@ typedef __boost_result_of__<
>::type type4; // type4 is float const & >::type type4; // type4 is float const &
``` ```
[endsect]
[#sec:result_of_tr1_protocol_guidelines] [#sec:result_of_tr1_protocol_guidelines]
[heading Usage guidelines for the TR1 result_of protocol] [section Usage guidelines for the TR1 result_of protocol]
On compliant C++11 compilers, __boost_result_of__ can On compliant C++11 compilers, __boost_result_of__ can
use __decltype__ to deduce the type of any use __decltype__ to deduce the type of any
@ -268,8 +272,10 @@ struct functor {
}; };
``` ```
[endsect]
[#sec:result_of_tr1_diff] [#sec:result_of_tr1_diff]
[heading Known differences between __boost_result_of__ and __boost_tr1_result_of__] [section Known differences between __boost_result_of__ and __boost_tr1_result_of__]
When using __decltype__, __boost_result_of__ ignores the TR1 protocol and instead deduces the When using __decltype__, __boost_result_of__ ignores the TR1 protocol and instead deduces the
return type of function objects directly via __decltype__. In most situations, users return type of function objects directly via __decltype__. In most situations, users
@ -391,17 +397,27 @@ BOOST_STATIC_ASSERT((
#endif #endif
``` ```
[endsect]
[#sec:result_of_cxx11_diff] [#sec:result_of_cxx11_diff]
[heading Known differences between __boost_result_of__ and C++11 result_of] [section Known differences between __boost_result_of__ and C++11 result_of]
When using __decltype__, __boost_result_of__ implements most of the C++11 __std_result_of__ When using __decltype__, __boost_result_of__ implements most of the C++11 __std_result_of__
specification. One known exception is that __boost_result_of__ does not implement the specification. One known exception is that __boost_result_of__ does not implement the
requirements regarding pointers to member data. requirements regarding pointers to member data.
[heading Acknowledgments] [endsect]
[/===============]
[xinclude result_of_reference.xml]
[/===============]
[section Acknowledgments]
Created by Doug Gregor. Contributions from Daniel Walker, Eric Niebler, Michel Morin and others. Created by Doug Gregor. Contributions from Daniel Walker, Eric Niebler, Michel Morin and others.
[endsect] [endsect]
[endsect]

View File

@ -10,7 +10,7 @@
[section String View] [section String View]
[/===============] [/===============]
[heading Introduction] [section Introduction]
The class __boost_string_view__ and other classes derived from __basic_string_view__ represent references to strings or substrings. When you are parsing/processing strings from some external source, frequently you want to pass a piece of text to a procedure for specialized processing. Before __std_string_view__, the canonical way to do this used to be a __std_string__, but that has certain drawbacks: The class __boost_string_view__ and other classes derived from __basic_string_view__ represent references to strings or substrings. When you are parsing/processing strings from some external source, frequently you want to pass a piece of text to a procedure for specialized processing. Before __std_string_view__, the canonical way to do this used to be a __std_string__, but that has certain drawbacks:
@ -51,9 +51,10 @@ Please prefer __string_view__ / __basic_string_view__ over __string_ref__ / __ba
] ]
[endsect]
[/===============] [/===============]
[heading Examples] [section Examples]
[/===============] [/===============]
Integrating __string_view__ into your code is fairly simple. Wherever you pass a `const __std_string__ &` or __std_string__ as a parameter, that's a candidate for passing a __boost_string_view__. Integrating __string_view__ into your code is fairly simple. Wherever you pass a `const __std_string__ &` or __std_string__ as a parameter, that's a candidate for passing a __boost_string_view__.
@ -86,9 +87,10 @@ if ( extract_part ( "ABCDEFG" ).front() == "C" ) { /* do something */ }
``` ```
No memory allocations. No copying of character data. No changes to the code other than the types. There are two __string_view__ s created, and two __string_view__ s copied, but those are cheap operations. No memory allocations. No copying of character data. No changes to the code other than the types. There are two __string_view__ s created, and two __string_view__ s copied, but those are cheap operations.
[endsect]
[/=================] [/=================]
[heading:reference Synopsis ] [section:reference Synopsis]
[/=================] [/=================]
The header file [@../../../include/boost/utility/string_view.hpp `<boost/utility/string_view.hpp>`] defines a template __boost_basic_string_view__, and four specializations __string_view__, __wstring_view__, __u16string_view__, __u32string_view__ - for `char` / `wchar_t` / `char16_t` / `char32_t`. The header file [@../../../include/boost/utility/string_view.hpp `<boost/utility/string_view.hpp>`] defines a template __boost_basic_string_view__, and four specializations __string_view__, __wstring_view__, __u16string_view__, __u32string_view__ - for `char` / `wchar_t` / `char16_t` / `char32_t`.
@ -173,9 +175,11 @@ bool starts_with(basic_string_view x) const ;
bool ends_with(charT c) const ; bool ends_with(charT c) const ;
bool ends_with(basic_string_view x) const ; bool ends_with(basic_string_view x) const ;
``` ```
[endsect]
[/===============] [/===============]
[h1 History] [section History]
[/===============] [/===============]
[h5 boost 1.71] [h5 boost 1.71]
@ -186,7 +190,15 @@ a common utility.
[h5 boost 1.53] [h5 boost 1.53]
* Introduced * Introduced
[heading Acknowledgments] [endsect]
[/===============]
[xinclude string_view_reference.xml]
[/===============]
[/===============]
[section Acknowledgments]
[/===============]
Author: Clow, Marshall Author: Clow, Marshall
@ -194,6 +206,5 @@ Copyright 2012 Marshall Clow
[endsect] [endsect]
[endsect]

View File

@ -9,9 +9,10 @@
[/===============] [/===============]
[#sec:value_init] [#sec:value_init]
[section Value Init] [section Value Init]
[/===============] [/===============]
[heading Introduction] [section Introduction]
Constructing and initializing objects in a generic way is difficult in Constructing and initializing objects in a generic way is difficult in
C++. The problem is that there are several different rules that apply C++. The problem is that there are several different rules that apply
@ -100,8 +101,10 @@ T var = initialized_value;
This form of initialization is semantically equivalent to `T4 var4 = T4()`, This form of initialization is semantically equivalent to `T4 var4 = T4()`,
but robust against the aforementioned compiler issues. but robust against the aforementioned compiler issues.
[endsect]
[#sec:details] [#sec:details]
[heading Details] [section Details]
The C++ standard \[[link sec:references 3]\] contains the definitions The C++ standard \[[link sec:references 3]\] contains the definitions
of `zero-initialization` and `default-initialization`. Informally, zero-initialization of `zero-initialization` and `default-initialization`. Informally, zero-initialization
@ -262,11 +265,13 @@ contains. It will do so for those compilers that need to have such a workaround,
[@boost:/doc/html/config/doc/html/boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_defects [@boost:/doc/html/config/doc/html/boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_defects
compiler defect macro] `BOOST_NO_COMPLETE_VALUE_INITIALIZATION`. compiler defect macro] `BOOST_NO_COMPLETE_VALUE_INITIALIZATION`.
[endsect]
[#sec:types] [#sec:types]
[heading Types and objects] [section Types and objects]
[#sec:val_init] [#sec:val_init]
[heading `template class value_initialized<T>`] [section `template class value_initialized<T>`]
``` ```
namespace boost { namespace boost {
@ -419,8 +424,10 @@ value_initialized<int const> const cx_c;
get(cx_c) = 1; // ERROR: Cannot modify a const object get(cx_c) = 1; // ERROR: Cannot modify a const object
``` ```
[endsect]
[#sec:initialized] [#sec:initialized]
[heading `template class initialized<T>`] [section `template class initialized<T>`]
``` ```
@ -482,8 +489,10 @@ object must ['always] be value-initialized, `__value_initialized__<T>`
may be preferable. And if the object must always be may be preferable. And if the object must always be
direct-initialized, none of the two wrappers really needs to be used. direct-initialized, none of the two wrappers really needs to be used.
[endsect]
[#sec:initialized_value] [#sec:initialized_value]
[heading `initialized_value`] [section `initialized_value`]
``` ```
namespace boost { namespace boost {
@ -526,8 +535,11 @@ Instead, one could use __initialized_value__ as follows:
T var = __initialized_value__; T var = __initialized_value__;
``` ```
[endsect]
[endsect]
[#sec:references] [#sec:references]
[h5 References] [section References]
# Bjarne Stroustrup, Gabriel Dos Reis, and J. Stephen Adamczyk wrote various papers, # Bjarne Stroustrup, Gabriel Dos Reis, and J. Stephen Adamczyk wrote various papers,
proposing to extend the support for brace-enclosed ['initializer lists] proposing to extend the support for brace-enclosed ['initializer lists]
@ -543,8 +555,14 @@ compiler-generated functions you do not want], [@http://www.aristeia.com/books.h
# POD stands for "Plain Old Data" # POD stands for "Plain Old Data"
[endsect]
[/===============]
[xinclude value_init_reference.xml]
[/===============]
[#sec:acknowledgements] [#sec:acknowledgements]
[h5 Acknowledgements] [section Acknowledgements]
__value_initialized__ was developed by Fernando Cacciola, with help and suggestions __value_initialized__ was developed by Fernando Cacciola, with help and suggestions
from David Abrahams and Darin Adler. from David Abrahams and Darin Adler.
@ -562,3 +580,5 @@ Developed by [@mailto:fernando_cacciola@hotmail.com Fernando Cacciola]. The late
this file can be found at [@http://www.boost.org www.boost.org]. this file can be found at [@http://www.boost.org www.boost.org].
[endsect] [endsect]
[endsect]

View File

@ -20,10 +20,11 @@
- John Maddock Jan 2000. - John Maddock Jan 2000.
*/ */
#ifndef BOOST_UTILITY_DOCS
#ifndef BOOST_OB_COMPRESSED_PAIR_HPP #ifndef BOOST_OB_COMPRESSED_PAIR_HPP
#define BOOST_OB_COMPRESSED_PAIR_HPP #define BOOST_OB_COMPRESSED_PAIR_HPP
#include <algorithm> #include <algorithm>
#ifndef BOOST_OBJECT_TYPE_TRAITS_HPP #ifndef BOOST_OBJECT_TYPE_TRAITS_HPP
#include <boost/type_traits/object_traits.hpp> #include <boost/type_traits/object_traits.hpp>
@ -494,6 +495,4 @@ inline void swap(compressed_pair<T1, T2>& x, compressed_pair<T1, T2>& y)
} // boost } // boost
#endif // BOOST_OB_COMPRESSED_PAIR_HPP #endif // BOOST_OB_COMPRESSED_PAIR_HPP
#endif // BOOST_UTILITY_DOCS

View File

@ -47,13 +47,14 @@
// {} // {}
// This macro should only persist within this file. // This macro should only persist within this file.
#ifndef BOOST_UTILITY_DOCS
#define BOOST_PRIVATE_CTR_DEF( z, n, data ) \ #define BOOST_PRIVATE_CTR_DEF( z, n, data ) \
template < BOOST_PP_ENUM_PARAMS(n, typename T) > \ template < BOOST_PP_ENUM_PARAMS(n, typename T) > \
base_from_member( BOOST_PP_ENUM_BINARY_PARAMS(n, T, x) ) \ base_from_member( BOOST_PP_ENUM_BINARY_PARAMS(n, T, x) ) \
: member( BOOST_PP_ENUM_PARAMS(n, x) ) \ : member( BOOST_PP_ENUM_PARAMS(n, x) ) \
{} \ {} \
/**/ /**/
#endif // BOOST_UTILITY_DOCS
namespace boost namespace boost
{ {

View File

@ -68,6 +68,7 @@
( (0) BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings ) \ ( (0) BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings ) \
) )
#ifndef BOOST_UTILITY_DOCS
#define BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings ) \ #define BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings ) \
BOOST_PP_SEQ_TRANSFORM \ BOOST_PP_SEQ_TRANSFORM \
( BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION \ ( BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION \
@ -703,6 +704,6 @@
#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111100 (1)(1)(1)(1)(1)(1)(0)(0), #define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111100 (1)(1)(1)(1)(1)(1)(0)(0),
#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111101 (1)(1)(1)(1)(1)(1)(0)(1), #define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111101 (1)(1)(1)(1)(1)(1)(0)(1),
#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111110 (1)(1)(1)(1)(1)(1)(1)(0), #define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111110 (1)(1)(1)(1)(1)(1)(1)(0),
#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111111 (1)(1)(1)(1)(1)(1)(1)(1), #define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111111 (1)(1)(1)(1)(1)(1)(1)(1),
#endif // BOOST_UTILITY_DOCS
#endif #endif

View File

@ -19,15 +19,21 @@ namespace boost {
class in_place_factory_base {} ; class in_place_factory_base {} ;
#ifndef BOOST_UTILITY_DOCS
#define BOOST_PP_ITERATION_LIMITS (0, BOOST_MAX_INPLACE_FACTORY_ARITY) #define BOOST_PP_ITERATION_LIMITS (0, BOOST_MAX_INPLACE_FACTORY_ARITY)
#define BOOST_PP_FILENAME_1 <boost/utility/in_place_factory.hpp> #define BOOST_PP_FILENAME_1 <boost/utility/in_place_factory.hpp>
#endif // BOOST_UTILITY_DOCS
#include BOOST_PP_ITERATE() #include BOOST_PP_ITERATE()
} // namespace boost } // namespace boost
#include <boost/utility/detail/in_place_factory_suffix.hpp> #include <boost/utility/detail/in_place_factory_suffix.hpp>
#ifndef BOOST_UTILITY_DOCS
#define BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP #define BOOST_UTILITY_INPLACE_FACTORY_04APR2007_HPP
#endif
#else #else
#define N BOOST_PP_ITERATION() #define N BOOST_PP_ITERATION()

View File

@ -36,9 +36,11 @@
# include <boost/preprocessor/facilities/intercept.hpp> # include <boost/preprocessor/facilities/intercept.hpp>
#endif #endif
#ifndef BOOST_UTILITY_DOCS
#ifndef BOOST_RESULT_OF_NUM_ARGS #ifndef BOOST_RESULT_OF_NUM_ARGS
# define BOOST_RESULT_OF_NUM_ARGS 16 # define BOOST_RESULT_OF_NUM_ARGS 16
#endif #endif
#endif // BOOST_UTILITY_DOCS
// Use the decltype-based version of result_of by default if the compiler // Use the decltype-based version of result_of by default if the compiler
// supports N3276 <http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf>. // supports N3276 <http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf>.
@ -51,6 +53,7 @@
BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK cannot be defined at the same time. BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK cannot be defined at the same time.
#endif #endif
#ifndef BOOST_UTILITY_DOCS
#ifndef BOOST_RESULT_OF_USE_TR1 #ifndef BOOST_RESULT_OF_USE_TR1
# ifndef BOOST_RESULT_OF_USE_DECLTYPE # ifndef BOOST_RESULT_OF_USE_DECLTYPE
# ifndef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK # ifndef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
@ -62,6 +65,7 @@
# endif # endif
# endif # endif
#endif #endif
#endif // BOOST_UTILITY_DOCS
namespace boost { namespace boost {

View File

@ -19,15 +19,20 @@ namespace boost {
class typed_in_place_factory_base {} ; class typed_in_place_factory_base {} ;
#ifndef BOOST_UTILITY_DOCS
#define BOOST_PP_ITERATION_LIMITS (0, BOOST_MAX_INPLACE_FACTORY_ARITY) #define BOOST_PP_ITERATION_LIMITS (0, BOOST_MAX_INPLACE_FACTORY_ARITY)
#define BOOST_PP_FILENAME_1 <boost/utility/typed_in_place_factory.hpp> #define BOOST_PP_FILENAME_1 <boost/utility/typed_in_place_factory.hpp>
#include BOOST_PP_ITERATE() #endif // BOOST_UTILITY_DOCS
#include BOOST_PP_ITERATE()
} // namespace boost } // namespace boost
#include <boost/utility/detail/in_place_factory_suffix.hpp> #include <boost/utility/detail/in_place_factory_suffix.hpp>
#ifndef BOOST_UTILITY_DOCS
#define BOOST_UTILITY_TYPED_INPLACE_FACTORY_04APR2007_HPP #define BOOST_UTILITY_TYPED_INPLACE_FACTORY_04APR2007_HPP
#endif // BOOST_UTILITY_DOCS
#else #else
#define N BOOST_PP_ITERATION() #define N BOOST_PP_ITERATION()

View File

@ -37,6 +37,8 @@
#pragma warning(disable: 4512) #pragma warning(disable: 4512)
#endif #endif
#ifndef BOOST_UTILITY_DOCS
#ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION #ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION
// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED // Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
// suggests that a workaround should be applied, because of compiler issues // suggests that a workaround should be applied, because of compiler issues
@ -54,6 +56,8 @@
#endif #endif
#endif #endif
#endif // BOOST_UTILITY_DOCS
namespace boost { namespace boost {
namespace detail { namespace detail {