/usr/include/boost/proto/functional/std
Edit: /usr/include/boost/proto/functional/std/utility.hpp (3919B)
///////////////////////////////////////////////////////////////////////////////
/// \file utility.hpp
/// Proto callables for things found in the std \
header
//
// Copyright 2010 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)
#ifndef BOOST_PROTO_FUNCTIONAL_STD_UTILITY_HPP_EAN_11_27_2010
#define BOOST_PROTO_FUNCTIONAL_STD_UTILITY_HPP_EAN_11_27_2010
#include
#include
#include
#include
namespace boost { namespace proto { namespace functional
{
/// \brief A PolymorphicFunctionObject type that invokes the
/// \c std::make_pair() algorithm on its arguments.
///
/// A PolymorphicFunctionObject type that invokes the
/// \c std::make_pair() algorithm on its arguments.
struct make_pair
{
BOOST_PROTO_CALLABLE()
template
struct result;
template
struct result
{
typedef
std::pair<
typename remove_const::type>::type
, typename remove_const::type>::type
>
type;
};
template
std::pair operator()(First const &first, Second const &second) const
{
return std::make_pair(first, second);
}
};
/// \brief A PolymorphicFunctionObject type that returns
/// the first element of a std::pair.
///
/// A PolymorphicFunctionObject type that returns
/// the first element of a std::pair..
struct first
{
BOOST_PROTO_CALLABLE()
template
struct result;
template
struct result
{
typedef typename Pair::first_type type;
};
template
struct result
{
typedef typename Pair::first_type &type;
};
template
struct result
{
typedef typename Pair::first_type const &type;
};
template
typename Pair::first_type &operator()(Pair &pair) const
{
return pair.first;
}
template
typename Pair::first_type const &operator()(Pair const &pair) const
{
return pair.first;
}
};
/// \brief A PolymorphicFunctionObject type that returns
/// the second element of a std::pair.
///
/// A PolymorphicFunctionObject type that returns
/// the second element of a std::pair..
struct second
{
BOOST_PROTO_CALLABLE()
template
struct result;
template
struct result
{
typedef typename Pair::second_type type;
};
template
struct result
{
typedef typename Pair::second_type &type;
};
template
struct result
{
typedef typename Pair::second_type const &type;
};
template
typename Pair::second_type &operator()(Pair &pair) const
{
return pair.second;
}
template
typename Pair::second_type const &operator()(Pair const &pair) const
{
return pair.second;
}
};
}}}
#endif