mirror of
https://github.com/boostorg/function.git
synced 2026-01-26 00:42:22 +01:00
https://svn.boost.org/svn/boost/trunk ................ r43810 | eric_niebler | 2008-03-23 14:51:40 -0700 (Sun, 23 Mar 2008) | 1 line mark up new foreach tests ................ r43823 | fmhess | 2008-03-24 08:07:00 -0700 (Mon, 24 Mar 2008) | 3 lines Fixed compile error with new enable_shared_from_this code, reported by Tim Blechmann ................ r43825 | ramey | 2008-03-24 08:46:09 -0700 (Mon, 24 Mar 2008) | 1 line removed EXIT_SUCCESS ................ r43826 | ramey | 2008-03-24 08:46:43 -0700 (Mon, 24 Mar 2008) | 1 line fixed minor typo ................ r43829 | pdimov | 2008-03-24 09:00:28 -0700 (Mon, 24 Mar 2008) | 1 line New enable_shared_from_this tests, fix. ................ r43838 | danieljames | 2008-03-24 10:03:15 -0700 (Mon, 24 Mar 2008) | 12 lines Merge new changes to unordered & hash. - Unordered tests can run lightweight test or Boost.Test (at least theoretically). - Workaround Open BSD's incorrect numeric_limits. - Move the hash extensions in their own file. - Various small improvements to the unordered docs. - Fix some unordered examples. Merged revisions 43117-43837 via svnmerge from https://svn.boost.org/svn/boost/branches/unordered/trunk ................ r43845 | dave | 2008-03-24 11:27:22 -0700 (Mon, 24 Mar 2008) | 1 line Work around vc9 bugs ................ r43847 | anthonyw | 2008-03-24 14:44:36 -0700 (Mon, 24 Mar 2008) | 1 line removed forward declaration for undefined type exclusive_lock ................ r43852 | hkaiser | 2008-03-25 06:40:53 -0700 (Tue, 25 Mar 2008) | 1 line Wave: Removed an assertion causing compilation problems on certain platforms. ................ r43856 | pdimov | 2008-03-25 08:46:40 -0700 (Tue, 25 Mar 2008) | 1 line _internal_accept_owner now checks if _owned isn't already true. ................ r43861 | dave | 2008-03-25 13:47:38 -0700 (Tue, 25 Mar 2008) | 2 lines Work around intel-10.0-win compiler bug ................ r43864 | dave | 2008-03-25 15:28:59 -0700 (Tue, 25 Mar 2008) | 2 lines Account for intel 10.x compiler bug ................ r43865 | dave | 2008-03-25 16:06:50 -0700 (Tue, 25 Mar 2008) | 2 lines Work around intel-win-10.0 preprocessor bug ................ r43866 | danieljames | 2008-03-26 02:10:29 -0700 (Wed, 26 Mar 2008) | 3 lines Boost.Thread's documentation no longer has a build section - so just link to the library's documentation like we do for other libraries. ................ r43867 | bemandawes | 2008-03-26 08:59:52 -0700 (Wed, 26 Mar 2008) | 1 line Initial commit ................ r43873 | pdimov | 2008-03-26 11:34:29 -0700 (Wed, 26 Mar 2008) | 1 line Added "Throws: nothing" to get_deleter. ................ r43875 | bemandawes | 2008-03-26 14:26:55 -0700 (Wed, 26 Mar 2008) | 1 line Initial commit ................ r43876 | danieljames | 2008-03-26 22:49:45 -0700 (Wed, 26 Mar 2008) | 2 lines Update the thread links in the generated getting started documentation. ................ r43879 | chris_kohlhoff | 2008-03-27 07:18:07 -0700 (Thu, 27 Mar 2008) | 3 lines Fix double-free error that occurs when an exception is thrown from a handler that has been dispatched (i.e. not posted) through a strand. ................ r43880 | ramey | 2008-03-27 08:53:37 -0700 (Thu, 27 Mar 2008) | 1 line removed suppression of builds for certain platforms with shared libraries ................ r43882 | ramey | 2008-03-27 10:11:23 -0700 (Thu, 27 Mar 2008) | 1 line tweaks to sneak past PGI compiler error message ................ r43883 | ramey | 2008-03-27 10:12:22 -0700 (Thu, 27 Mar 2008) | 1 line added test to check warnings on type trait ................ r43884 | dgregor | 2008-03-27 12:44:37 -0700 (Thu, 27 Mar 2008) | 1 line Change Boost.Function allocator behavior, from Emil Dotchevski ................ r43887 | pdimov | 2008-03-27 15:13:55 -0700 (Thu, 27 Mar 2008) | 1 line Silence unused parameter warning. ................ r43888 | pdimov | 2008-03-27 15:20:11 -0700 (Thu, 27 Mar 2008) | 1 line detail::yield(k) added. ................ r43895 | danieljames | 2008-03-27 16:38:01 -0700 (Thu, 27 Mar 2008) | 25 lines Merged revisions 43838-43894 via svnmerge from https://svn.boost.org/svn/boost/branches/unordered/trunk ........ r43840 | danieljames | 2008-03-24 17:25:07 +0000 (Mon, 24 Mar 2008) | 1 line Fix a g++ warning. ........ r43844 | danieljames | 2008-03-24 17:56:28 +0000 (Mon, 24 Mar 2008) | 1 line It's a new-ish year. ........ r43885 | danieljames | 2008-03-27 20:36:10 +0000 (Thu, 27 Mar 2008) | 1 line The release script doesn't need to copy images and css - because that's now done in the jamfiles. Also tweak the shell script a tad bit. ........ r43890 | danieljames | 2008-03-27 23:01:40 +0000 (Thu, 27 Mar 2008) | 1 line Starting to add a docbook bibliography. ........ r43894 | danieljames | 2008-03-27 23:24:18 +0000 (Thu, 27 Mar 2008) | 1 line Redeclare 'data' in iterator_base to help compilers which have trouble with accessing the nested typedef. ........ ................ r43900 | noel_belcourt | 2008-03-27 19:10:04 -0700 (Thu, 27 Mar 2008) | 4 lines Fix address-model support for 32/64 bit code generation. Replaced -mcmodel with -m32 / -m64. ................ r43901 | bemandawes | 2008-03-27 19:11:13 -0700 (Thu, 27 Mar 2008) | 1 line Remove per email from Dave ................ r43906 | eric_niebler | 2008-03-27 23:10:55 -0700 (Thu, 27 Mar 2008) | 1 line proto support for BOOST_PROTO_MAX_FUNCTION_CALL_ARITY ................ [SVN r43910]
939 lines
42 KiB
XML
939 lines
42 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
|
|
|
|
Distributed under the Boost Software License, Version 1.0.
|
|
(See accompanying file LICENSE_1_0.txt or copy at
|
|
http://www.boost.org/LICENSE_1_0.txt)
|
|
-->
|
|
<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
|
|
"http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
|
|
|
|
<library-reference id="function.reference" last-revision="$Date$">
|
|
|
|
<section id="function.definitions">
|
|
<title>Definitions</title>
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>A function object <computeroutput>f</computeroutput> is
|
|
<emphasis>compatible</emphasis> if for the given set of argument
|
|
types <computeroutput>Arg1</computeroutput>,
|
|
<computeroutput>Arg2</computeroutput>, ...,
|
|
<computeroutput>ArgN</computeroutput> and a
|
|
return type <computeroutput>ResultType</computeroutput>, the
|
|
appropriate following function is well-formed:
|
|
<programlisting>
|
|
<emphasis>// if ResultType is not <emphasis role="bold">void</emphasis></emphasis>
|
|
ResultType foo(Arg1 arg1, Arg2 arg2, ..., Arg<emphasis>N</emphasis> arg<emphasis>N</emphasis>)
|
|
{
|
|
<emphasis role="bold">return</emphasis> f(arg1, arg2, ..., arg<emphasis>N</emphasis>);
|
|
}
|
|
|
|
<emphasis>// if ResultType is <emphasis role="bold">void</emphasis></emphasis>
|
|
ResultType foo(Arg1 arg1, Arg2 arg2, ..., Arg<emphasis>N</emphasis> arg<emphasis>N</emphasis>)
|
|
{
|
|
f(arg1, arg2, ..., arg<emphasis>N</emphasis>);
|
|
}
|
|
</programlisting></para>
|
|
|
|
<para> A special provision is made for pointers to member
|
|
functions. Though they are not function objects, Boost.Function
|
|
will adapt them internally to function objects. This requires
|
|
that a pointer to member function of the form <code>R
|
|
(X::*mf)(Arg1, Arg2, ..., ArgN)
|
|
cv-quals</code> be adapted to a
|
|
function object with the following function call operator
|
|
overloads:
|
|
<programlisting>
|
|
<emphasis role="bold">template</emphasis><<emphasis role="bold">typename P</emphasis>>
|
|
R <emphasis role="bold">operator</emphasis>()(<emphasis>cv-quals</emphasis> P& x, Arg1 arg1, Arg2 arg2, ..., Arg<emphasis>N</emphasis> arg<emphasis>N</emphasis>) <emphasis role="bold">const</emphasis>
|
|
{
|
|
<emphasis role="bold">return</emphasis> (*x).*mf(arg1, arg2, ..., arg<emphasis>N</emphasis>);
|
|
}
|
|
</programlisting>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>A function object <code>f</code> of
|
|
type <code>F</code> is
|
|
<emphasis>stateless</emphasis> if it is a function pointer or if
|
|
<code><classname>boost::is_stateless</classname><T></code>
|
|
is true. The construction of or copy to a Boost.Function object
|
|
from a stateless function object will not cause exceptions to be
|
|
thrown and will not allocate any storage.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</section>
|
|
|
|
<header name="boost/function.hpp">
|
|
<namespace name="boost">
|
|
<class name="bad_function_call">
|
|
<inherit access="public"><classname>std::runtime_error</classname></inherit>
|
|
<purpose>An exception type thrown when an instance of a <code>function</code> object is empty when invoked.</purpose>
|
|
<constructor>
|
|
<effects><simpara>Constructs a <code><classname>bad_function_call</classname></code> exception object.</simpara></effects>
|
|
</constructor>
|
|
</class>
|
|
|
|
<class name="function_base">
|
|
<purpose>The common base class for all Boost.Function
|
|
objects. Objects of type function_base may not be created
|
|
directly.</purpose>
|
|
|
|
<method-group name="capacity">
|
|
<method name="empty" cv="const">
|
|
<type>bool</type>
|
|
<returns><simpara><code>false</code> if <code>this</code> has a target, and <code>true</code> otherwise.</simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
</method-group>
|
|
|
|
<method-group name="target access">
|
|
<overloaded-method name="target">
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>Functor*</type>
|
|
</signature>
|
|
<signature cv="const">
|
|
<template>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>const Functor*</type>
|
|
</signature>
|
|
|
|
<returns><simpara>If <code>this</code> stores a target of type
|
|
<code>Functor</code>, returns the address of the
|
|
target. Otherwise, returns the NULL
|
|
pointer.</simpara></returns>
|
|
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</overloaded-method>
|
|
|
|
<method name="contains" cv="const">
|
|
<template>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f">
|
|
<paramtype>const Functor&</paramtype>
|
|
</parameter>
|
|
<returns><simpara><code>true</code> if <code>this-><methodname>target</methodname><Functor>()</code> is non-NULL and <code><functionname>function_equal</functionname>(*(this->target<Functor>()), f)</code></simpara></returns>
|
|
|
|
</method>
|
|
|
|
<method name="target_type" cv="const">
|
|
<type>const std::type_info&</type>
|
|
<returns><simpara><code>typeid</code> of the target function object, or <code>typeid(void)</code> if <code>this-><methodname>empty</methodname>()</code>.</simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
</method-group>
|
|
</class>
|
|
|
|
<class name="functionN">
|
|
<template>
|
|
<template-type-parameter name="R"/>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
</template>
|
|
|
|
<inherit access="public"><classname>function_base</classname></inherit>
|
|
|
|
<purpose>A set of generalized function pointers that can be used for callbacks or wrapping function objects.</purpose>
|
|
|
|
<description>
|
|
<para>Class template <classname>functionN</classname> is
|
|
actually a family of related classes <classname
|
|
alt="functionN">function0</classname>, <classname
|
|
alt="functionN">function1</classname>, etc., up to some
|
|
implementation-defined maximum. In this context, <code>N</code>
|
|
refers to the number of parameters.</para>
|
|
</description>
|
|
|
|
<typedef name="result_type"><type>R</type></typedef>
|
|
<typedef name="argument_type">
|
|
<type>T1</type><purpose>If N == 1</purpose>
|
|
</typedef>
|
|
<typedef name="first_argument_type">
|
|
<type>T1</type>
|
|
<purpose>If N == 2</purpose>
|
|
</typedef>
|
|
<typedef name="second_argument_type">
|
|
<type>T2</type>
|
|
<purpose>If N == 2</purpose>
|
|
</typedef>
|
|
<typedef name="arg1_type"><type>T1</type></typedef>
|
|
<typedef name="arg2_type"><type>T2</type></typedef>
|
|
<typedef name="..."><type/></typedef>
|
|
<typedef name="argN_type"><type>TN</type></typedef>
|
|
|
|
<static-constant name="arity">
|
|
<type>int</type>
|
|
<default>N</default>
|
|
</static-constant>
|
|
|
|
<struct name="sig">
|
|
<template>
|
|
<template-type-parameter name="Args"/>
|
|
</template>
|
|
|
|
<purpose>
|
|
<simpara><libraryname>Lambda</libraryname> library support</simpara>
|
|
</purpose>
|
|
|
|
<typedef name="type"><type>result_type</type></typedef>
|
|
</struct>
|
|
|
|
<constructor>
|
|
<postconditions><simpara><code>this-><methodname>empty</methodname>()</code></simpara></postconditions>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</constructor>
|
|
|
|
<constructor>
|
|
<parameter name="f">
|
|
<paramtype>const <classname>functionN</classname>&</paramtype>
|
|
</parameter>
|
|
<postconditions><simpara>Contains a copy of the <code>f</code>'s target, if it has one, or is empty if <code>f.<methodname>empty</methodname>()</code>.</simpara></postconditions>
|
|
<throws><simpara>Will not throw unless copying the target of <code>f</code> throws.</simpara></throws>
|
|
</constructor>
|
|
|
|
<constructor>
|
|
<template>
|
|
<template-type-parameter name="F"/>
|
|
</template>
|
|
<parameter name="f"><paramtype>F</paramtype></parameter>
|
|
<requires><simpara>F is a function object Callable from <code>this</code>.</simpara></requires>
|
|
<postconditions><simpara><code>*this</code> targets a copy of <code>f</code> if <code>f</code> is nonempty, or <code>this-><methodname>empty</methodname>()</code> if <code>f</code> is empty.</simpara></postconditions>
|
|
</constructor>
|
|
|
|
<constructor>
|
|
<template>
|
|
<template-type-parameter name="F"/>
|
|
<template-type-parameter name="Allocator"/>
|
|
</template>
|
|
<parameter name="f"><paramtype>F</paramtype></parameter>
|
|
<parameter name="alloc"><paramtype>Allocator</paramtype></parameter>
|
|
<requires><simpara>F is a function object Callable from <code>this</code>, Allocator is an allocator. The copy constructor and destructor of Allocator shall not throw.</simpara></requires>
|
|
<postconditions><simpara><code>*this</code> targets a copy of <code>f</code> if <code>f</code> is nonempty, or <code>this-><methodname>empty</methodname>()</code> if <code>f</code> is empty.</simpara></postconditions>
|
|
|
|
<effects><simpara>If memory allocation is required, the given allocator (or a copy of it) will be used to allocate that memory.</simpara></effects>
|
|
</constructor>
|
|
|
|
<destructor>
|
|
<effects><simpara>If <code>!this-><methodname>empty</methodname>()</code>, destroys the target of this.</simpara></effects>
|
|
|
|
</destructor>
|
|
|
|
<copy-assignment>
|
|
<parameter name="f">
|
|
<paramtype>const <classname>functionN</classname>&</paramtype>
|
|
</parameter>
|
|
<postconditions><simpara>If copy construction does not throw, <code>*this</code> targets a copy of <code>f</code>'s target, if it has one, or is empty if <code>f.<methodname>empty</methodname>()</code>. If copy construction does throw, <code>this-><methodname>empty</methodname>()</code>.</simpara></postconditions>
|
|
</copy-assignment>
|
|
|
|
<method-group name="modifiers">
|
|
<method name="swap">
|
|
<type>void</type>
|
|
<parameter name="f"><paramtype>const <classname>functionN</classname>&</paramtype></parameter>
|
|
<effects><simpara>Interchanges the targets of <code>*this</code> and <code>f</code>.</simpara></effects>
|
|
</method>
|
|
|
|
<method name="clear">
|
|
<type>void</type>
|
|
<postconditions><simpara>this-><methodname>empty</methodname>()</simpara></postconditions>
|
|
</method>
|
|
</method-group>
|
|
|
|
<method-group name="capacity">
|
|
<method name="empty" cv="const">
|
|
<type>bool</type>
|
|
<returns><simpara><code>false</code> if <code>this</code> has a target, and <code>true</code> otherwise.</simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
|
|
<method name="conversion-operator" cv="const">
|
|
<type>safe_bool</type>
|
|
<returns><simpara>A <code>safe_bool</code> that evaluates <code>false</code> in a boolean context when <code>this-><methodname>empty</methodname>()</code>, and <code>true</code> otherwise.</simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
|
|
<method name="operator!" cv="const">
|
|
<type>bool</type>
|
|
<returns><simpara><code>this-><methodname>empty</methodname>()</code></simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
</method-group>
|
|
|
|
<method-group name="target access">
|
|
<overloaded-method name="target">
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>Functor*</type>
|
|
</signature>
|
|
<signature cv="const">
|
|
<template>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>const Functor*</type>
|
|
</signature>
|
|
|
|
<returns><simpara>If <code>this</code> stores a target of type
|
|
<code>Functor</code>, returns the address of the
|
|
target. Otherwise, returns the NULL
|
|
pointer.</simpara></returns>
|
|
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</overloaded-method>
|
|
|
|
<method name="contains" cv="const">
|
|
<template>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f">
|
|
<paramtype>const Functor&</paramtype>
|
|
</parameter>
|
|
<returns><simpara><code>true</code> if <code>this-><methodname>target</methodname><Functor>()</code> is non-NULL and <code><functionname>function_equal</functionname>(*(this->target<Functor>()), f)</code></simpara></returns>
|
|
|
|
</method>
|
|
|
|
<method name="target_type" cv="const">
|
|
<type>const std::type_info&</type>
|
|
<returns><simpara><code>typeid</code> of the target function object, or <code>typeid(void)</code> if <code>this-><methodname>empty</methodname>()</code>.</simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
|
|
</method-group>
|
|
|
|
<method-group name="invocation">
|
|
<method name="operator()" cv="const">
|
|
<type>result_type</type>
|
|
<parameter name="a1"><paramtype>arg1_type</paramtype></parameter>
|
|
<parameter name="a2"><paramtype>arg2_type</paramtype></parameter>
|
|
<parameter><paramtype>...</paramtype></parameter>
|
|
<parameter name="aN"><paramtype>argN_type</paramtype></parameter>
|
|
<effects><simpara><code>f(a1, a2, ..., aN)</code>, where <code>f</code> is the target of <code>*this</code>.</simpara></effects>
|
|
<returns><simpara>if <code>R</code> is <code>void</code>, nothing is returned; otherwise, the return value of the call to <code>f</code> is returned.</simpara></returns>
|
|
<throws><simpara><code><classname>bad_function_call</classname></code> if <code>this-><methodname>empty</methodname>()</code>. Otherwise, may through any exception thrown by the target function <code>f</code>.</simpara></throws>
|
|
</method>
|
|
</method-group>
|
|
|
|
<free-function-group name="specialized algorithms">
|
|
<function name="swap">
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
</template>
|
|
<type>void</type>
|
|
<parameter name="f1"><paramtype><classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
<parameter name="f2"><paramtype><classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
<effects><simpara><code>f1.<methodname>swap</methodname>(f2)</code></simpara></effects>
|
|
</function>
|
|
</free-function-group>
|
|
|
|
<free-function-group name="comparison operators">
|
|
<overloaded-function name="operator==">
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
<parameter name="g"><paramtype>Functor</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="g"><paramtype>Functor</paramtype></parameter>
|
|
<parameter name="f"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
<parameter name="g"><paramtype><classname>reference_wrapper</classname><Functor></paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="g"><paramtype><classname>reference_wrapper</classname><Functor></paramtype></parameter>
|
|
<parameter name="f"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="U1"/>
|
|
<template-type-parameter name="U2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="UN"/>
|
|
</template>
|
|
<type>void</type>
|
|
<parameter name="f1"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
<parameter name="f2"><paramtype>const <classname>functionN</classname><U1, U2, ..., UN>&</paramtype></parameter>
|
|
</signature>
|
|
|
|
<returns><simpara>True when <code>f</code> stores an object of
|
|
type <code>Functor</code> and one of the following conditions applies:
|
|
<itemizedlist>
|
|
|
|
<listitem><simpara><code>g</code> is of type
|
|
<code><classname>reference_wrapper</classname><Functor></code>
|
|
and <code>f.target<Functor>() == g.<methodname
|
|
alt="reference_wrapper::get_pointer">get_pointer</methodname>()</code>.</simpara></listitem>
|
|
|
|
<listitem><simpara><code>g</code> is not of type
|
|
<code><classname>reference_wrapper</classname><Functor></code>
|
|
and
|
|
<code><functionname>function_equal</functionname>(*(f.target<Functor>()),
|
|
g)</code>.</simpara></listitem>
|
|
|
|
</itemizedlist>
|
|
</simpara></returns>
|
|
|
|
<notes><simpara><code><classname>functionN</classname></code>
|
|
objects are not
|
|
<conceptname>EqualityComparable</conceptname>.</simpara></notes>
|
|
|
|
<rationale><simpara>The <code>safe_bool</code> conversion
|
|
opens a loophole whereby two <code>functionN</code>
|
|
instances can be compared via <code>==</code>, although this
|
|
is not feasible to implement. The undefined <code>void
|
|
operator==</code> closes the loophole and ensures a
|
|
compile-time or link-time error.</simpara></rationale>
|
|
</overloaded-function>
|
|
|
|
<overloaded-function name="operator!=">
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
<parameter name="g"><paramtype>Functor</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="g"><paramtype>Functor</paramtype></parameter>
|
|
<parameter name="f"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
<parameter name="g"><paramtype><classname>reference_wrapper</classname><Functor></paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="g"><paramtype><classname>reference_wrapper</classname><Functor></paramtype></parameter>
|
|
<parameter name="f"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="T1"/>
|
|
<template-type-parameter name="T2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="TN"/>
|
|
<template-type-parameter name="U1"/>
|
|
<template-type-parameter name="U2"/>
|
|
<template-varargs/>
|
|
<template-type-parameter name="UN"/>
|
|
</template>
|
|
<type>void</type>
|
|
<parameter name="f1"><paramtype>const <classname>functionN</classname><T1, T2, ..., TN>&</paramtype></parameter>
|
|
<parameter name="f2"><paramtype>const <classname>functionN</classname><U1, U2, ..., UN>&</paramtype></parameter>
|
|
</signature>
|
|
|
|
<returns><simpara>True when <code>f</code> does not store an
|
|
object of type <code>Functor</code> or it stores an object of
|
|
type <code>Functor</code> and one of the following conditions
|
|
applies:
|
|
<itemizedlist>
|
|
|
|
<listitem><simpara><code>g</code> is of type
|
|
<code><classname>reference_wrapper</classname><Functor></code>
|
|
and <code>f.target<Functor>() != g.<methodname
|
|
alt="reference_wrapper::get_pointer">get_pointer</methodname>()</code>.</simpara></listitem>
|
|
|
|
<listitem><simpara><code>g</code> is not of type
|
|
<code><classname>reference_wrapper</classname><Functor></code>
|
|
and <code>!<functionname>function_equal</functionname>(*(f.target<Functor>()), g)</code>.</simpara></listitem>
|
|
|
|
</itemizedlist>
|
|
</simpara></returns>
|
|
|
|
<notes><simpara><code><classname>functionN</classname></code>
|
|
objects are not
|
|
<conceptname>EqualityComparable</conceptname>.</simpara></notes>
|
|
|
|
<rationale><simpara>The <code>safe_bool</code> conversion
|
|
opens a loophole whereby two <code>functionN</code>
|
|
instances can be compared via <code>!=</code>, although this
|
|
is not feasible to implement. The undefined <code>void
|
|
operator!=</code> closes the loophole and ensures a
|
|
compile-time or link-time error.</simpara></rationale>
|
|
</overloaded-function>
|
|
</free-function-group>
|
|
</class>
|
|
|
|
<class name="function">
|
|
<template>
|
|
<template-type-parameter name="Signature">
|
|
<purpose>Function type R (T1, T2, ..., TN)</purpose>
|
|
</template-type-parameter>
|
|
</template>
|
|
<inherit access="public"><classname>functionN</classname><R, T1, T2, ..., TN></inherit>
|
|
|
|
<purpose>A generalized function pointer that can be used for
|
|
callbacks or wrapping function objects.</purpose>
|
|
|
|
<description>
|
|
<para>Class template <classname>function</classname> is a thin
|
|
wrapper around the numbered class templates <classname
|
|
alt="functionN">function0</classname>, <classname
|
|
alt="functionN">function1</classname>, etc. It accepts a
|
|
function type with N arguments and will will derive from
|
|
<classname>functionN</classname> instantiated with the arguments
|
|
it receives.</para>
|
|
|
|
<para>The semantics of all operations in class template
|
|
<classname>function</classname> are equivalent to that of the
|
|
underlying <classname>functionN</classname> object, although
|
|
additional member functions are required to allow proper copy
|
|
construction and copy assignment of function objects.</para>
|
|
</description>
|
|
|
|
<typedef name="result_type"><type>R</type></typedef>
|
|
<typedef name="argument_type">
|
|
<type>T1</type><purpose>If N == 1</purpose>
|
|
</typedef>
|
|
<typedef name="first_argument_type">
|
|
<type>T1</type>
|
|
<purpose>If N == 2</purpose>
|
|
</typedef>
|
|
<typedef name="second_argument_type">
|
|
<type>T2</type>
|
|
<purpose>If N == 2</purpose>
|
|
</typedef>
|
|
<typedef name="arg1_type"><type>T1</type></typedef>
|
|
<typedef name="arg2_type"><type>T2</type></typedef>
|
|
<typedef name="..."><type/></typedef>
|
|
<typedef name="argN_type"><type>TN</type></typedef>
|
|
|
|
<static-constant name="arity">
|
|
<type>int</type>
|
|
<default>N</default>
|
|
</static-constant>
|
|
|
|
<struct name="sig">
|
|
<template>
|
|
<template-type-parameter name="Args"/>
|
|
</template>
|
|
|
|
<purpose>
|
|
<simpara><libraryname>Lambda</libraryname> library support</simpara>
|
|
</purpose>
|
|
|
|
<typedef name="type"><type>result_type</type></typedef>
|
|
</struct>
|
|
|
|
<constructor>
|
|
<postconditions><simpara><code>this-><methodname>empty</methodname>()</code></simpara></postconditions>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</constructor>
|
|
|
|
<constructor>
|
|
<parameter name="f">
|
|
<paramtype>const <classname>functionN</classname>&</paramtype>
|
|
</parameter>
|
|
<postconditions><simpara>Contains a copy of the <code>f</code>'s target, if it has one, or is empty if <code>f.<methodname>empty</methodname>()</code>.</simpara></postconditions>
|
|
<throws><simpara>Will not throw unless copying the target of <code>f</code> throws.</simpara></throws>
|
|
</constructor>
|
|
|
|
<constructor>
|
|
<parameter name="f">
|
|
<paramtype>const <classname>function</classname>&</paramtype>
|
|
</parameter>
|
|
<postconditions><simpara>Contains a copy of the <code>f</code>'s target, if it has one, or is empty if <code>f.<methodname>empty</methodname>()</code>.</simpara></postconditions>
|
|
<throws><simpara>Will not throw unless copying the target of <code>f</code> throws.</simpara></throws>
|
|
</constructor>
|
|
|
|
<constructor>
|
|
<template>
|
|
<template-type-parameter name="F"/>
|
|
</template>
|
|
<parameter name="f"><paramtype>F</paramtype></parameter>
|
|
<requires><simpara>F is a function object Callable from <code>this</code>.</simpara></requires>
|
|
<postconditions><simpara><code>*this</code> targets a copy of <code>f</code> if <code>f</code> is nonempty, or <code>this-><methodname>empty</methodname>()</code> if <code>f</code> is empty.</simpara></postconditions>
|
|
</constructor>
|
|
|
|
<constructor>
|
|
<template>
|
|
<template-type-parameter name="F"/>
|
|
<template-type-parameter name="Allocator"/>
|
|
</template>
|
|
<parameter name="f"><paramtype>F</paramtype></parameter>
|
|
<parameter name="alloc"><paramtype>Allocator</paramtype></parameter>
|
|
<requires><simpara>F is a function object Callable from <code>this</code>, Allocator is an allocator. The copy constructor and destructor of Allocator shall not throw.</simpara></requires>
|
|
<postconditions><simpara><code>*this</code> targets a copy of <code>f</code> if <code>f</code> is nonempty, or <code>this-><methodname>empty</methodname>()</code> if <code>f</code> is empty.</simpara></postconditions>
|
|
|
|
<effects><simpara>If memory allocation is required, the given allocator (or a copy of it) will be used to allocate that memory.</simpara></effects>
|
|
</constructor>
|
|
|
|
<destructor>
|
|
<effects><simpara>If <code>!this-><methodname>empty</methodname>()</code>, destroys the target of <code>this</code>.</simpara></effects>
|
|
|
|
</destructor>
|
|
|
|
<copy-assignment>
|
|
<parameter name="f">
|
|
<paramtype>const <classname>function</classname>&</paramtype>
|
|
</parameter>
|
|
<postconditions><simpara>If copy construction does not throw, <code>*this</code> targets a copy of <code>f</code>'s target, if it has one, or is empty if <code>f.<methodname>empty</methodname>()</code>. If copy construction does throw, <code>this-><methodname>empty</methodname>()</code>.</simpara></postconditions>
|
|
</copy-assignment>
|
|
|
|
<copy-assignment>
|
|
<parameter name="f">
|
|
<paramtype>const <classname>function</classname>&</paramtype>
|
|
</parameter>
|
|
<postconditions><simpara>If copy construction of the target of <code>f</code> does not throw, <code>*this</code> targets a copy of <code>f</code>'s target, if it has one, or is empty if <code>f.<methodname>empty</methodname>()</code>. </simpara></postconditions>
|
|
<throws><simpara>Will not throw when the target of <code>f</code> is a stateless function object or a reference to the function object. If copy construction does throw, <code>this-><methodname>empty</methodname>()</code>.</simpara></throws>
|
|
</copy-assignment>
|
|
|
|
<method-group name="modifiers">
|
|
<method name="swap">
|
|
<type>void</type>
|
|
<parameter name="f"><paramtype>const <classname>function</classname>&</paramtype></parameter>
|
|
<effects><simpara>Interchanges the targets of <code>*this</code> and <code>f</code>.</simpara></effects>
|
|
</method>
|
|
|
|
<method name="clear">
|
|
<type>void</type>
|
|
<postconditions><simpara><code>this-><methodname>empty</methodname>()</code></simpara></postconditions>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
</method-group>
|
|
|
|
<method-group name="capacity">
|
|
<method name="empty" cv="const">
|
|
<type>bool</type>
|
|
<returns><simpara><code>false</code> if <code>this</code> has a target, and <code>true</code> otherwise.</simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
|
|
<method name="conversion-operator" cv="const">
|
|
<type>safe_bool</type>
|
|
<returns><simpara>A <code>safe_bool</code> that evaluates <code>false</code> in a boolean context when <code>this-><methodname>empty</methodname>()</code>, and <code>true</code> otherwise.</simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
|
|
<method name="operator!" cv="const">
|
|
<type>bool</type>
|
|
<returns><simpara><code>this-><methodname>empty</methodname>()</code></simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
</method-group>
|
|
|
|
<method-group name="target access">
|
|
<overloaded-method name="target">
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>Functor*</type>
|
|
</signature>
|
|
<signature cv="const">
|
|
<template>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>const Functor*</type>
|
|
</signature>
|
|
|
|
<returns><simpara>If <code>this</code> stores a target of type
|
|
<code>Functor</code>, returns the address of the
|
|
target. Otherwise, returns the NULL
|
|
pointer.</simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</overloaded-method>
|
|
|
|
<method name="contains" cv="const">
|
|
<template>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f">
|
|
<paramtype>const Functor&</paramtype>
|
|
</parameter>
|
|
<returns><simpara><code>true</code> if <code>this-><methodname>target</methodname><Functor>()</code> is non-NULL and <code><functionname>function_equal</functionname>(*(this->target<Functor>()), f)</code></simpara></returns>
|
|
|
|
</method>
|
|
|
|
<method name="target_type" cv="const">
|
|
<type>const std::type_info&</type>
|
|
<returns><simpara><code>typeid</code> of the target function object, or <code>typeid(void)</code> if <code>this-><methodname>empty</methodname>()</code>.</simpara></returns>
|
|
<throws><simpara>Will not throw.</simpara></throws>
|
|
</method>
|
|
</method-group>
|
|
|
|
<method-group name="invocation">
|
|
<method name="operator()" cv="const">
|
|
<type>result_type</type>
|
|
<parameter name="a1"><paramtype>arg1_type</paramtype></parameter>
|
|
<parameter name="a2"><paramtype>arg2_type</paramtype></parameter>
|
|
<parameter><paramtype>...</paramtype></parameter>
|
|
<parameter name="aN"><paramtype>argN_type</paramtype></parameter>
|
|
<effects><simpara><code>f(a1, a2, ..., aN)</code>, where <code>f</code> is the target of <code>*this</code>.</simpara></effects>
|
|
<returns><simpara>if <code>R</code> is <code>void</code>, nothing is returned; otherwise, the return value of the call to <code>f</code> is returned.</simpara></returns>
|
|
<throws><simpara><code><classname>bad_function_call</classname></code> if <code>this-><methodname>empty</methodname>()</code>. Otherwise, may through any exception thrown by the target function <code>f</code>.</simpara></throws>
|
|
</method>
|
|
</method-group>
|
|
|
|
<free-function-group name="specialized algorithms">
|
|
<function name="swap">
|
|
<template>
|
|
<template-type-parameter name="Signature"/>
|
|
</template>
|
|
<type>void</type>
|
|
<parameter name="f1"><paramtype><classname>function</classname><Signature>&</paramtype></parameter>
|
|
<parameter name="f2"><paramtype><classname>function</classname><Signature>&</paramtype></parameter>
|
|
<effects><simpara><code>f1.<methodname>swap</methodname>(f2)</code></simpara></effects>
|
|
</function>
|
|
</free-function-group>
|
|
|
|
<free-function-group name="comparison operators">
|
|
<overloaded-function name="operator==">
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f"><paramtype>const <classname>function</classname><Signature>&</paramtype></parameter>
|
|
<parameter name="g"><paramtype>Functor</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="g"><paramtype>Functor</paramtype></parameter>
|
|
<parameter name="f"><paramtype>const <classname>function</classname><Signature>&</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f"><paramtype>const <classname>function</classname><Signature>&</paramtype></parameter>
|
|
<parameter name="g"><paramtype><classname>reference_wrapper</classname><Functor></paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="g"><paramtype><classname>reference_wrapper</classname><Functor></paramtype></parameter>
|
|
<parameter name="f"><paramtype>const <classname>function</classname><Signature>&</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature1"/>
|
|
<template-type-parameter name="Signature2"/>
|
|
</template>
|
|
<type>void</type>
|
|
<parameter name="f1"><paramtype>const <classname>function</classname><Signature1>&</paramtype></parameter>
|
|
<parameter name="f2"><paramtype>const <classname>function</classname><Signature2>&</paramtype></parameter>
|
|
</signature>
|
|
|
|
<returns><simpara>True when <code>f</code> stores an object of
|
|
type <code>Functor</code> and one of the following conditions applies:
|
|
<itemizedlist>
|
|
|
|
<listitem><simpara><code>g</code> is of type
|
|
<code><classname>reference_wrapper</classname><Functor></code>
|
|
and <code>f.target<Functor>() == g.<methodname
|
|
alt="reference_wrapper::get_pointer">get_pointer</methodname>()</code>.</simpara></listitem>
|
|
|
|
<listitem><simpara><code>g</code> is not of type
|
|
<code><classname>reference_wrapper</classname><Functor></code>
|
|
and <code><functionname>function_equals</functionname>(*(f.target<Functor>()), g)</code>.</simpara></listitem>
|
|
|
|
</itemizedlist>
|
|
</simpara></returns>
|
|
|
|
<notes><simpara><code><classname>function</classname></code>
|
|
objects are not
|
|
<conceptname>EqualityComparable</conceptname>.</simpara></notes>
|
|
|
|
<rationale><simpara>The <code>safe_bool</code> conversion
|
|
opens a loophole whereby two <code>function</code>
|
|
instances can be compared via <code>==</code>, although this
|
|
is not feasible to implement. The undefined <code>void
|
|
operator==</code> closes the loophole and ensures a
|
|
compile-time or link-time error.</simpara></rationale>
|
|
</overloaded-function>
|
|
|
|
<overloaded-function name="operator!=">
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f"><paramtype>const <classname>function</classname><Signature>&</paramtype></parameter>
|
|
<parameter name="g"><paramtype>Functor</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="g"><paramtype>Functor</paramtype></parameter>
|
|
<parameter name="f"><paramtype>const <classname>function</classname><Signature>&</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f"><paramtype>const <classname>function</classname><Signature>&</paramtype></parameter>
|
|
<parameter name="g"><paramtype><classname>reference_wrapper</classname><Functor></paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature"/>
|
|
<template-type-parameter name="Functor"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="g"><paramtype><classname>reference_wrapper</classname><Functor></paramtype></parameter>
|
|
<parameter name="f"><paramtype>const <classname>function</classname><Signature>&</paramtype></parameter>
|
|
</signature>
|
|
<signature>
|
|
<template>
|
|
<template-type-parameter name="Signature1"/>
|
|
<template-type-parameter name="Signature2"/>
|
|
</template>
|
|
<type>void</type>
|
|
<parameter name="f1"><paramtype>const <classname>function</classname><Signature1>&</paramtype></parameter>
|
|
<parameter name="f2"><paramtype>const <classname>function</classname><Signature2>&</paramtype></parameter>
|
|
</signature>
|
|
|
|
<returns><simpara>True when <code>f</code> does not store an
|
|
object of type <code>Functor</code> or it stores an object of
|
|
type <code>Functor</code> and one of the following conditions
|
|
applies:
|
|
<itemizedlist>
|
|
|
|
<listitem><simpara><code>g</code> is of type
|
|
<code><classname>reference_wrapper</classname><Functor></code>
|
|
and <code>f.target<Functor>() != g.<methodname
|
|
alt="reference_wrapper::get_pointer">get_pointer</methodname>()</code>.</simpara></listitem>
|
|
|
|
<listitem><simpara><code>g</code> is not of type
|
|
<code><classname>reference_wrapper</classname><Functor></code>
|
|
and <code>!<functionname>function_equals</functionname>(*(f.target<Functor>()), g)</code>.</simpara></listitem>
|
|
|
|
</itemizedlist>
|
|
</simpara></returns>
|
|
|
|
<notes><simpara><code><classname>function</classname></code>
|
|
objects are not
|
|
<conceptname>EqualityComparable</conceptname>.</simpara></notes>
|
|
|
|
<rationale><simpara>The <code>safe_bool</code> conversion
|
|
opens a loophole whereby two <code>function</code>
|
|
instances can be compared via <code>!=</code>, although this
|
|
is not feasible to implement. The undefined <code>void
|
|
operator!=</code> closes the loophole and ensures a
|
|
compile-time or link-time error.</simpara></rationale>
|
|
</overloaded-function>
|
|
</free-function-group>
|
|
</class>
|
|
</namespace>
|
|
</header>
|
|
|
|
<header name="boost/function_equal.hpp">
|
|
<namespace name="boost">
|
|
<function name="function_equal">
|
|
<template>
|
|
<template-type-parameter name="F"/>
|
|
<template-type-parameter name="G"/>
|
|
</template>
|
|
<type>bool</type>
|
|
<parameter name="f">
|
|
<paramtype>const F&</paramtype>
|
|
</parameter>
|
|
<parameter name="g">
|
|
<paramtype>const G&</paramtype>
|
|
</parameter>
|
|
<purpose><simpara>Compare two function objects for equality.</simpara></purpose>
|
|
<returns><simpara><code>f == g</code>.</simpara></returns>
|
|
<throws><simpara>Only if <code>f == g</code> throws.</simpara></throws>
|
|
</function>
|
|
</namespace>
|
|
</header>
|
|
</library-reference>
|