blob: 081caec3aedc5adbcd7bf3c201a2c3530337b81b [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2012 Eric Niebler
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)
-->
<header name="boost/proto/functional/std/utility.hpp">
<para>Defines Proto callables <computeroutput><classname>boost::proto::functional::make_pair</classname></computeroutput>,
<computeroutput><classname>boost::proto::functional::first</classname></computeroutput> and
<computeroutput><classname>boost::proto::functional::second</classname></computeroutput>.</para>
<namespace name="boost">
<namespace name="proto">
<namespace name="functional">
<!-- proto::functional::make_pair -->
<struct name="make_pair">
<purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes
<computeroutput>std::make_pair()</computeroutput> on its arguments.</purpose>
<description>
<para>
A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes
<computeroutput>std::make_pair()</computeroutput> on its arguments.</para>
</description>
<inherit>
<type><classname>proto::callable</classname></type>
</inherit>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="First"/>
<template-type-parameter name="Second"/>
</template>
<specialization>
<template-arg>This(First, Second)</template-arg>
</specialization>
<typedef name="type">
<type>std::pair&lt;
typename boost::remove_const&lt;typename boost::remove_reference&lt;First&gt;::type&gt;::type
, typename boost::remove_const&lt;typename boost::remove_reference&lt;Second&gt;::type&gt;::type
&gt;</type>
</typedef>
</struct-specialization>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>typename std::pair&lt; First, Second &gt;</type>
<template>
<template-type-parameter name="First"/>
<template-type-parameter name="Second"/>
</template>
<parameter name="first">
<paramtype>First const &amp;</paramtype>
</parameter>
<parameter name="second">
<paramtype>Second const &amp;</paramtype>
</parameter>
<returns>
<para><computeroutput>std::make_pair(first, second)</computeroutput></para>
</returns>
</method>
</method-group>
</struct>
<!-- proto::functional::first -->
<struct name="first">
<purpose>
A <conceptname>PolymorphicFunctionObject</conceptname> type that returns
the first element of a <computeroutput>std::pair&lt;&gt;</computeroutput>.
</purpose>
<description>
<para>
A <conceptname>PolymorphicFunctionObject</conceptname> type that returns
the first element of a <computeroutput>std::pair&lt;&gt;</computeroutput>.</para>
</description>
<inherit><type><classname>proto::callable</classname></type>
</inherit>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="Pair"/>
</template>
<specialization>
<template-arg>This(Pair)</template-arg>
</specialization>
<typedef name="type">
<type>typename Pair::first_type</type>
</typedef>
</struct-specialization>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="Pair"/>
</template>
<specialization>
<template-arg>This(Pair &amp;)</template-arg>
</specialization>
<typedef name="type">
<type>typename Pair::first_type &amp;</type>
</typedef>
</struct-specialization>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="Pair"/>
</template>
<specialization>
<template-arg>This(Pair const &amp;)</template-arg>
</specialization>
<typedef name="type">
<type>typename Pair::first_type const &amp;</type>
</typedef>
</struct-specialization>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>typename Pair::first_type &amp;</type>
<template>
<template-type-parameter name="Pair"/>
</template>
<parameter name="pair">
<paramtype>Pair &amp;</paramtype>
</parameter>
<returns>
<para>
<computeroutput>pair.first</computeroutput>
</para>
</returns>
</method>
<method name="operator()" cv="const">
<type>typename Pair::first_type const &amp;</type>
<template>
<template-type-parameter name="Pair"/>
</template>
<parameter name="pair">
<paramtype>Pair const &amp;</paramtype>
</parameter>
<returns>
<para>
<computeroutput>pair.first</computeroutput>
</para>
</returns>
</method>
</method-group>
</struct>
<!-- proto::functional::second -->
<struct name="second">
<purpose>
A <conceptname>PolymorphicFunctionObject</conceptname> type that returns
the second element of a <computeroutput>std::pair&lt;&gt;</computeroutput>.
</purpose>
<description>
<para>
A <conceptname>PolymorphicFunctionObject</conceptname> type that returns
the second element of a <computeroutput>std::pair&lt;&gt;</computeroutput>.
</para>
</description>
<inherit><type><classname>proto::callable</classname></type></inherit>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="Pair"/>
</template>
<specialization>
<template-arg>This(Pair)</template-arg>
</specialization>
<typedef name="type">
<type>typename Pair::second_type</type>
</typedef>
</struct-specialization>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="Pair"/>
</template>
<specialization>
<template-arg>This(Pair &amp;)</template-arg>
</specialization>
<typedef name="type">
<type>typename Pair::second_type &amp;</type>
</typedef>
</struct-specialization>
<struct-specialization name="result">
<template>
<template-type-parameter name="This"/>
<template-type-parameter name="Pair"/>
</template>
<specialization>
<template-arg>This(Pair const &amp;)</template-arg>
</specialization>
<typedef name="type">
<type>typename Pair::second_type const &amp;</type>
</typedef>
</struct-specialization>
<method-group name="public member functions">
<method name="operator()" cv="const">
<type>typename Pair::second_type &amp;</type>
<template>
<template-type-parameter name="Pair"/>
</template>
<parameter name="pair">
<paramtype>Pair &amp;</paramtype>
</parameter>
<returns>
<para>
<computeroutput>pair.second</computeroutput>
</para>
</returns>
</method>
<method name="operator()" cv="const">
<type>typename Pair::second_type const &amp;</type>
<template>
<template-type-parameter name="Pair"/>
</template>
<parameter name="pair">
<paramtype>Pair const &amp;</paramtype>
</parameter>
<returns>
<para>
<computeroutput>pair.second</computeroutput>
</para>
</returns>
</method>
</method-group>
</struct>
</namespace>
</namespace>
</namespace>
</header>