/usr/include/boost/phoenix/function
Edit: /usr/include/boost/phoenix/function/lazy_signature.hpp (15278B)
////////////////////////////////////////////////////////////////////////////
// lazy_signature.hpp
//
// Build signature structs for Phoenix equivalents for FC++
// which are located in lazy_prelude.hpp
//
// These are not direct equivalents of the Boost FC++ structs.
// This file has to be included after lazy_list.hpp
//
// Implemented so far:
//
// RTEFH == ReturnTypeEnumFromHelper (used in enum_from, enum_from_to)
// RTFD == ReturnTypeFunctionDelay (used in repeat)
// RTFFX == ReturnTypeFunctoidFwithX (used in thunk1)
// RTFFXY == ReturnTypeFunctoidFwithXandY (used in thunk2)
// RTFFXYZ == ReturnTypeFunctoidFwithXandYandZ (used in thunk3)
// RTF == ReturnTypeF (used in ptr_to_fun0)
// RTFX == ReturnTypeFwithX (used in ptr_to_fun, ptr_to_mem_fun)
// RTFXY == ReturnTypeFwithXandY (used in ptr_to_fun, ptr_to_mem_fun)
// RTFXYZ == ReturnTypeFwithXandYandZ (used in ptr_to_fun, ptr_to_mem_fun)
// RTFWXYZ == ReturnTypeFwithWandXandYandZ (used in ptr_to_fun)
// RTFGHX == ReturnTypeFandGandHwithX (used in compose)
// RTFGHXY == ReturnTypeFandGandHwithXY (used in compose)
// RTFGHXYZ == ReturnTypeFandGandHwithXYZ (used in compose)
// RTFGX == ReturnTypeFandGwithX (used in compose)
// RTFGXY == ReturnTypeFandGwithXY (used in compose)
// RTFGXYZ == ReturnTypeFandGwithXYZ (used in compose)
// RTFL == ReturnTypeFunctionList (used in map)
// RTAB == ReturnTypeListAListB (used in zip)
// RTZAB == ReturnTypeZipListAListB (used in zip_with)
//
////////////////////////////////////////////////////////////////////////////
/*=============================================================================
Copyright (c) 2000-2003 Brian McNamara and Yannis Smaragdakis
Copyright (c) 2001-2007 Joel de Guzman
Copyright (c) 2015 John Fletcher
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_PHOENIX_FUNCTION_LAZY_SIGNATURE
#define BOOST_PHOENIX_FUNCTION_LAZY_SIGNATURE
namespace boost {
namespace phoenix {
namespace impl {
//template
struct remove_RC; in lazy_operator.hpp
// RTEFH == ReturnTypeEnumFromHelper
template
struct RTEFH
{
typedef typename UseList::template List::type LType;
typedef typename result_of::ListType::
delay_result_type type;
};
// RTFD == ReturnTypeFunctionDelay (used in repeat)
template
struct RTFD {
typedef typename remove_RC::type TTT;
typedef typename UseList::template List::type LType;
typedef typename result_of::ListType::
delay_result_type type;
};
// RTFFX == ReturnTypeFunctoidFwithX (used in thunk1)
template
struct RTFFX {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type XType;
typedef typename boost::result_of::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFFXY == ReturnTypeFunctoidFwithXandY (used in thunk2)
template
struct RTFFXY {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type XType;
typedef typename remove_RC::type YType;
typedef typename boost::result_of::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFFXYZ == ReturnTypeFunctoidFwithXandYandZ (used in thunk3)
template
struct RTFFXYZ {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type XType;
typedef typename remove_RC::type YType;
typedef typename remove_RC::type ZType;
typedef typename boost::result_of::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTF == ReturnTypeF (used in ptr_to_fun0)
template
struct RTF {
typedef typename remove_RC::type FType;
typedef typename boost::result_of::type FR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFX == ReturnTypeFwithX (used in ptr_to_fun)
template
struct RTFX {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type XType;
typedef typename boost::result_of::type FR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFXY == ReturnTypeFwithXandY (used in ptr_to_fun)
template
struct RTFXY {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type XType;
typedef typename remove_RC::type YType;
typedef typename boost::result_of::type FR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFXYZ == ReturnTypeFwithXandYandZ (used in ptr_to_fun)
template
struct RTFXYZ {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type XType;
typedef typename remove_RC::type YType;
typedef typename remove_RC::type ZType;
typedef typename boost::result_of::type FR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFWXYZ == ReturnTypeFwithWandXandYandZ (used in ptr_to_fun)
template
struct RTFWXYZ {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type WType;
typedef typename remove_RC::type XType;
typedef typename remove_RC::type YType;
typedef typename remove_RC::type ZType;
typedef typename boost::result_of::
type FR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFGHX == ReturnTypeFandGandHwithX (used in compose)
template
struct RTFGHX {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type GType;
typedef typename remove_RC::type HType;
typedef typename remove_RC::type XType;
typedef typename boost::result_of::type GR;
typedef typename boost::result_of::type GRR;
typedef typename remove_RC::type GRType;
typedef typename boost::result_of::type HR;
typedef typename boost::result_of
::type HRR;
typedef typename remove_RC::type HRType;
typedef typename boost::result_of::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFGHXY == ReturnTypeFandGandHwithXY (used in compose)
template
struct RTFGHXY {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type GType;
typedef typename remove_RC::type HType;
typedef typename remove_RC::type XType;
typedef typename remove_RC::type YType;
typedef typename boost::result_of::type GR;
typedef typename boost::result_of::type GRR;
typedef typename remove_RC::type GRType;
typedef typename boost::result_of::type HR;
typedef typename boost::result_of
::type HRR;
typedef typename remove_RC::type HRType;
typedef typename boost::result_of::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFGHXYZ == ReturnTypeFandGandHwithXYZ (used in compose)
template
struct RTFGHXYZ {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type GType;
typedef typename remove_RC::type HType;
typedef typename remove_RC::type XType;
typedef typename remove_RC::type YType;
typedef typename remove_RC::type ZType;
typedef typename boost::result_of::type GR;
typedef typename boost::result_of::type GRR;
typedef typename remove_RC::type GRType;
typedef typename boost::result_of::type HR;
typedef typename boost::result_of
::type HRR;
typedef typename remove_RC::type HRType;
typedef typename boost::result_of::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFGX == ReturnTypeFandGwithX (used in compose)
template
struct RTFGX {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type GType;
typedef typename remove_RC::type XType;
typedef typename boost::result_of::type GR;
typedef typename boost::result_of::type GRR;
typedef typename remove_RC::type GRType;
typedef typename boost::result_of::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFGXY == ReturnTypeFandGwithXY (used in compose)
template
struct RTFGXY {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type GType;
typedef typename remove_RC::type XType;
typedef typename remove_RC::type YType;
typedef typename boost::result_of::type GR;
typedef typename boost::result_of::type GRR;
typedef typename remove_RC::type GRType;
typedef typename boost::result_of::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// RTFGXYZ == ReturnTypeFandGwithXYZ (used in compose)
template
struct RTFGXYZ {
typedef typename remove_RC::type FType;
typedef typename remove_RC::type GType;
typedef typename remove_RC::type XType;
typedef typename remove_RC::type YType;
typedef typename remove_RC::type ZType;
typedef typename boost::result_of::type GR;
typedef typename boost::result_of::type GRR;
typedef typename remove_RC::type GRType;
typedef typename boost::result_of::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type RType;
typedef RType type;
};
// This is the way to make the return type for
// map(f,l). It is used four times in the code
// so I have made it a separate struct.
// RTFL == ReturnTypeFunctionList
template
struct RTFL {
typedef typename remove_RC::type Ftype;
typedef typename result_of::ListType::tail_result_type
Ttype;
typedef typename result_of::ListType::value_type Vtype;
// NOTE: FR is the type of the functor.
typedef typename boost::result_of::type FR;
// NOTE: RR is the type returned, which then needs
// reference and const removal.
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type Rtype;
typedef typename boost::remove_reference::type LL;
typedef typename LL::template cons_rebind::delay_type
type;
};
// RTAB == ReturnTypeListAListB
template
struct RTAB {
typedef typename result_of::ListType::tail_result_type
LAtype;
typedef typename result_of::ListType::tail_result_type
LBtype;
typedef typename result_of::ListType::value_type VAA;
typedef typename boost::remove_const::type VAtype;
typedef typename result_of::ListType::value_type VBB;
typedef typename boost::remove_const::type VBtype;
typedef typename boost::result_of
::type FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type Rtype;
typedef typename boost::remove_reference::type LLA;
typedef typename LLA::template cons_rebind::type type;
};
// RTZAB == ReturnTypeZipListAListB
template
struct RTZAB {
typedef typename remove_RC::type Ztype;
typedef typename result_of::ListType::tail_result_type
LAtype;
typedef typename result_of::ListType::tail_result_type
LBtype;
typedef typename result_of::ListType::value_type VAtype;
typedef typename result_of::ListType::value_type VBtype;
typedef typename boost::result_of::type
FR;
typedef typename boost::result_of::type RR;
typedef typename remove_RC::type Rtype;
typedef typename boost::remove_reference::type LLA;
typedef typename LLA::template cons_rebind::type type;
};
}
}
}
#endif