$include_dir="/home/hyper-archives/boost-users/include";
 include("$include_dir/msg-header.inc")
?>
OK, I worked it out. I couldn't get this to compile:
        
typedef
typename boost::mpl::if_c<IS_OUTER,
        
        
typename PAYLOAD::key_type,
        
        PAYLOAD
        >::type
testing;
The problem is that I can't have the type specification
PAYLOAD::key_type, it has to be disconnected to allow lazy evaluation to
work. The following compiles and works:
        template <
bool F , typename T >
        struct
get_key_type_if { typedef typename T type; };
        template
< typename T >
        struct
get_key_type_if<true, T> { typedef typename T::key_type type;
};
        
typedef
typename
 get_key_type_if<IS_OUTER,
PAYLOAD>::type testing;
Ah, finally, I have an MPL variant that works:
        
struct
 get_key_type {
template
 <
typename
 T >
struct
 apply {
typedef
typename
 T::key_type type; }; };
        
typedef
typename
 boost::mpl::eval_if_c<IS_OUTER,
        
        
typename
 boost::mpl::apply<get_key_type,
PAYLOAD>,
        
        
typename
 boost::mpl::identity<PAYLOAD>
        >::type
testing;
Is this as simple as it gets?
 
$include_dir="/home/hyper-archives/boost-users/include";
include("$include_dir/msg-footer.inc");
?>