code:
//  (C) Copyright Gennadiy Rozental 2001.
//  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)

//  See http://www.boost.org/libs/test for the library home page.
//
//  File        : $RCSfile$
//
//  Version     : $Revision$
//
//  Description : defines runtime parameters setup error
// ***************************************************************************

#ifndef BOOST_TEST_UTILS_RUNTIME_INIT_ERROR_HPP
#define BOOST_TEST_UTILS_RUNTIME_INIT_ERROR_HPP

// Boost.Test Runtime parameters
#include <boost/test/utils/runtime/fwd.hpp>

// Boost.Test
#include <boost/test/utils/string_cast.hpp>

// Boost.Test
#include <boost/config.hpp>

// STL
#include <exception>
#include <vector>

#include <boost/test/detail/suppress_warnings.hpp>

namespace boost {
namespace runtime {

// ************************************************************************** //
// **************             runtime::param_error             ************** //
// ************************************************************************** //

class param_error : public std::exception {
public:
    ~param_error() BOOST_NOEXCEPT_OR_NOTHROW {}

    virtual const char * what() const BOOST_NOEXCEPT_OR_NOTHROW
    {
        return msg.c_str();
    }

    cstring     param_name;
    std::string msg;

protected:
    explicit    param_error( cstring param_name_ ) : param_name( param_name_) {}
};

//____________________________________________________________________________//

class init_error : public param_error {
protected:
    explicit    init_error( cstring param_name ) : param_error( param_name ) {}
    ~init_error() BOOST_NOEXCEPT_OR_NOTHROW {}
};

class input_error : public param_error {
protected:
    explicit    input_error( cstring param_name ) : param_error( param_name ) {}
    ~input_error() BOOST_NOEXCEPT_OR_NOTHROW {}
};

//____________________________________________________________________________//

template<typename Derived, typename Base>
class specific_param_error : public Base {
protected:
    explicit    specific_param_error( cstring param_name ) : Base( param_name ) {}
    ~specific_param_error() BOOST_NOEXCEPT_OR_NOTHROW {}

public:

//____________________________________________________________________________//

#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
    !defined(BOOST_NO_CXX11_REF_QUALIFIERS)

    Derived operator<<(char const* val) &&
    {
        this->msg.append( val );

        return reinterpret_cast<Derived&&>(*this);
    }

    //____________________________________________________________________________//

    template<typename T>
    Derived operator<<(T const& val) &&
    {
        this->msg.append( unit_test::utils::string_cast( val ) );

        return reinterpret_cast<Derived&&>(*this);
    }

    //____________________________________________________________________________//

#else

    Derived const& operator<<(char const* val) const
    {
        const_cast<specific_param_error<Derived, Base>&>(*this).msg.append( val );

        return static_cast<Derived const&>(*this);
    }

    //____________________________________________________________________________//

    template<typename T>
    Derived const& operator<<(T const& val) const
    {
        const_cast<specific_param_error<Derived, Base>&>(*this).msg.append( unit_test::utils::string_cast( val ) );

        return static_cast<Derived const&>(*this);
    }

    //____________________________________________________________________________//

#endif

};

// ************************************************************************** //
// **************           specific exception types           ************** //
// ************************************************************************** //

#define SPECIFIC_EX_TYPE( type, base )                  \
class type : public specific_param_error<type,base> {   \
public:                                                 \
    explicit type( cstring param_name = cstring() )     \
    : specific_param_error<type,base>( param_name )     \
    {}                                                  \
}                                                       \
/**/

SPECIFIC_EX_TYPE( invalid_cla_id, init_error );
SPECIFIC_EX_TYPE( duplicate_param, init_error );
SPECIFIC_EX_TYPE( conflicting_param, init_error );
SPECIFIC_EX_TYPE( unknown_param, init_error );
SPECIFIC_EX_TYPE( access_to_missing_argument, init_error );
SPECIFIC_EX_TYPE( arg_type_mismatch, init_error );
SPECIFIC_EX_TYPE( invalid_param_spec, init_error );

SPECIFIC_EX_TYPE( format_error, input_error );
SPECIFIC_EX_TYPE( duplicate_arg, input_error );
SPECIFIC_EX_TYPE( missing_req_arg, input_error );

#undef SPECIFIC_EX_TYPE

class ambiguous_param : public specific_param_error<ambiguous_param, input_error> {
public:
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
    explicit    ambiguous_param( std::vector<cstring>&& amb_candidates )
    : specific_param_error<ambiguous_param,input_error>( "" )
    , m_amb_candidates( std::move( amb_candidates ) ) {}
#else
    explicit    ambiguous_param( std::vector<cstring> const& amb_candidates )
    : specific_param_error<ambiguous_param,input_error>( "" )
    , m_amb_candidates( amb_candidates ) {}
#endif
    ~ambiguous_param() BOOST_NOEXCEPT_OR_NOTHROW {}

    std::vector<cstring> m_amb_candidates;
};

class unrecognized_param : public specific_param_error<unrecognized_param, input_error> {
public:
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
    explicit    unrecognized_param( std::vector<cstring>&& type_candidates )
    : specific_param_error<unrecognized_param,input_error>( "" )
    , m_typo_candidates( std::move( type_candidates ) ) {}
#else
    explicit    unrecognized_param( std::vector<cstring> const& type_candidates )
    : specific_param_error<unrecognized_param,input_error>( "" )
    , m_typo_candidates( type_candidates ) {}
#endif
    ~unrecognized_param() BOOST_NOEXCEPT_OR_NOTHROW {}

    std::vector<cstring> m_typo_candidates;
};

} // namespace runtime
} // namespace boost

#include <boost/test/detail/enable_warnings.hpp>

#endif // BOOST_TEST_UTILS_RUNTIME_INIT_ERROR_HPP


code:
//  (C) Copyright David Abrahams 2000.
// 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)
//
//  The author gratefully acknowleges the support of Dragon Systems, Inc., in
//  producing this work.

//  This file serves as a wrapper around <Python.h> which allows it to be
//  compiled with GCC 2.95.2 under Win32 and which disables the default MSVC
//  behavior so that a program may be compiled in debug mode without requiring a
//  special debugging build of the Python library.

//  To use the Python debugging library, #define BOOST_DEBUG_PYTHON on the
//  compiler command-line.

// Revision History:
// 05 Mar 01  Suppress warnings under Cygwin with Python 2.0 (Dave Abrahams)
// 04 Mar 01  Rolled in some changes from the Dragon fork (Dave Abrahams)
// 01 Mar 01  define PyObject_INIT() for Python 1.x (Dave Abrahams)

#ifdef _DEBUG
# ifndef BOOST_DEBUG_PYTHON
#  ifdef _MSC_VER
    // VC8.0 will complain if system headers are #included both with
    // and without _DEBUG defined, so we have to #include all the
    // system headers used by pyconfig.h right here.
#   include <stddef.h>
#   include <stdarg.h>
#   include <stdio.h>
#   include <stdlib.h>
#   include <assert.h>
#   include <errno.h>
#   include <ctype.h>
#   include <wchar.h>
#   include <basetsd.h>
#   include <io.h>
#   include <limits.h>
#   include <float.h>
#   include <string.h>
#   include <math.h>
#   include <time.h>
#  endif
#  undef _DEBUG // Don't let Python force the debug library just because we're debugging.
#  define DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
# endif
#endif

# include <pyconfig.h>
# if defined(_SGI_COMPILER_VERSION) && _SGI_COMPILER_VERSION >= 740
#  undef _POSIX_C_SOURCE
#  undef _XOPEN_SOURCE
#  undef HAVE_STDINT_H // undo Python 2.5.1 define
# endif

//
// Python's LongObject.h helpfully #defines ULONGLONG_MAX for us,
// which confuses Boost's config
//
#include <limits.h>
#ifndef ULONG_MAX
# define BOOST_PYTHON_ULONG_MAX_UNDEFINED
#endif
#ifndef LONGLONG_MAX
# define BOOST_PYTHON_LONGLONG_MAX_UNDEFINED
#endif
#ifndef ULONGLONG_MAX
# define BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED
#endif

//
// Get ahold of Python's version number
//
#include <patchlevel.h>

#if PY_MAJOR_VERSION<2 || PY_MAJOR_VERSION==2 && PY_MINOR_VERSION<2
#error Python 2.2 or higher is required for this version of Boost.Python.
#endif

//
// Some things we need in order to get Python.h to work with compilers other
// than MSVC on Win32
//
#if defined(_WIN32) || defined(__CYGWIN__)
# if defined(__GNUC__) && defined(__CYGWIN__)

#  if defined(__LP64__)
#   define SIZEOF_LONG 8
#  else
#   define SIZEOF_LONG 4
#  endif

#  if PY_MAJOR_VERSION < 2 || PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 2

typedef int pid_t;

#   if defined(__LP64__)
#    define WORD_BIT 64
#   else
#    define WORD_BIT 32
#   endif
#   define hypot _hypot
#   include <stdio.h>

#   if PY_MAJOR_VERSION < 2
#    define HAVE_CLOCK
#    define HAVE_STRFTIME
#    define HAVE_STRERROR
#   endif

#   define NT_THREADS

#   ifndef NETSCAPE_PI
#    define USE_SOCKET
#   endif

#   ifdef USE_DL_IMPORT
#    define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
#   endif

#   ifdef USE_DL_EXPORT
#    define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
#    define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
#   endif

#   define HAVE_LONG_LONG 1
#   define LONG_LONG long long
#  endif

# elif defined(__MWERKS__)

#  ifndef _MSC_VER
#   define PY_MSC_VER_DEFINED_FROM_WRAP_PYTHON_H 1
#   define _MSC_VER 900
#  endif

#  undef hypot // undo the evil #define left by Python.

# elif defined(__BORLANDC__)
#  undef HAVE_HYPOT
#  define HAVE_HYPOT 1
# endif

#endif // _WIN32

#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION == 2 && PY_MICRO_VERSION < 2
# include <boost/python/detail/python22_fixed.h>
#else
# include <Python.h>
#endif

#ifdef BOOST_PYTHON_ULONG_MAX_UNDEFINED
# undef ULONG_MAX
# undef BOOST_PYTHON_ULONG_MAX_UNDEFINED
#endif

#ifdef BOOST_PYTHON_LONGLONG_MAX_UNDEFINED
# undef LONGLONG_MAX
# undef BOOST_PYTHON_LONGLONG_MAX_UNDEFINED
#endif

#ifdef BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED
# undef ULONGLONG_MAX
# undef BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED
#endif

#ifdef PY_MSC_VER_DEFINED_FROM_WRAP_PYTHON_H
# undef _MSC_VER
#endif

#ifdef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
# undef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
# define _DEBUG
# ifdef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H
#  undef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H
#  undef _CRT_NOFORCE_MANIFEST
# endif
#endif

#if !defined(PY_MAJOR_VERSION) || PY_MAJOR_VERSION < 2
# define PyObject_INIT(op, typeobj) \
        ( (op)->ob_type = (typeobj), _Py_NewReference((PyObject *)(op)), (op) )
#endif

// Define Python 3 macros for Python 2.x
#if PY_VERSION_HEX < 0x02060000

# define Py_TYPE(o)    (((PyObject*)(o))->ob_type)
# define Py_REFCNT(o)  (((PyObject*)(o))->ob_refcnt)
# define Py_SIZE(o)    (((PyVarObject*)(o))->ob_size)

# define PyVarObject_HEAD_INIT(type, size) \
        PyObject_HEAD_INIT(type) size,

#endif

#ifdef __MWERKS__
# pragma warn_possunwant off
#elif _MSC_VER
# pragma warning(disable:4786)
#endif

#if defined(HAVE_LONG_LONG)
# if defined(PY_LONG_LONG)
#  define BOOST_PYTHON_LONG_LONG PY_LONG_LONG
# elif defined(LONG_LONG)
#  define BOOST_PYTHON_LONG_LONG LONG_LONG
# else
#  error "HAVE_LONG_LONG defined but not PY_LONG_LONG or LONG_LONG"
# endif
#endif

license: mit


code:
# /* **************************************************************************
#  *                                                                          *
#  *     (C) Copyright Paul Mensonides 2002.
#  *     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)
#  *                                                                          *
#  ************************************************************************** */
#
# /* See http://www.boost.org for most recent version. */
#
# if defined(BOOST_PP_ITERATION_LIMITS)
#    if !defined(BOOST_PP_FILENAME_5)
#        error BOOST_PP_ERROR:  depth #5 filename is not defined
#    endif
#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
#    include <boost/preprocessor/iteration/detail/bounds/lower5.hpp>
#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
#    include <boost/preprocessor/iteration/detail/bounds/upper5.hpp>
#    define BOOST_PP_ITERATION_FLAGS_5() 0
#    undef BOOST_PP_ITERATION_LIMITS
# elif defined(BOOST_PP_ITERATION_PARAMS_5)
#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_5)
#    include <boost/preprocessor/iteration/detail/bounds/lower5.hpp>
#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_5)
#    include <boost/preprocessor/iteration/detail/bounds/upper5.hpp>
#    define BOOST_PP_FILENAME_5 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_5)
#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_5) >= 4
#        define BOOST_PP_ITERATION_FLAGS_5() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_5)
#    else
#        define BOOST_PP_ITERATION_FLAGS_5() 0
#    endif
# else
#    error BOOST_PP_ERROR:  depth #5 iteration boundaries or filename not defined
# endif
#
# undef BOOST_PP_ITERATION_DEPTH
# define BOOST_PP_ITERATION_DEPTH() 5
#
# if (BOOST_PP_ITERATION_START_5) > (BOOST_PP_ITERATION_FINISH_5)
#    include <boost/preprocessor/iteration/detail/iter/reverse5.hpp>
# else
#    if BOOST_PP_ITERATION_START_5 <= 0 && BOOST_PP_ITERATION_FINISH_5 >= 0
#        define BOOST_PP_ITERATION_5 0
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 1 && BOOST_PP_ITERATION_FINISH_5 >= 1
#        define BOOST_PP_ITERATION_5 1
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 2 && BOOST_PP_ITERATION_FINISH_5 >= 2
#        define BOOST_PP_ITERATION_5 2
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 3 && BOOST_PP_ITERATION_FINISH_5 >= 3
#        define BOOST_PP_ITERATION_5 3
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 4 && BOOST_PP_ITERATION_FINISH_5 >= 4
#        define BOOST_PP_ITERATION_5 4
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 5 && BOOST_PP_ITERATION_FINISH_5 >= 5
#        define BOOST_PP_ITERATION_5 5
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 6 && BOOST_PP_ITERATION_FINISH_5 >= 6
#        define BOOST_PP_ITERATION_5 6
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 7 && BOOST_PP_ITERATION_FINISH_5 >= 7
#        define BOOST_PP_ITERATION_5 7
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 8 && BOOST_PP_ITERATION_FINISH_5 >= 8
#        define BOOST_PP_ITERATION_5 8
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 9 && BOOST_PP_ITERATION_FINISH_5 >= 9
#        define BOOST_PP_ITERATION_5 9
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 10 && BOOST_PP_ITERATION_FINISH_5 >= 10
#        define BOOST_PP_ITERATION_5 10
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 11 && BOOST_PP_ITERATION_FINISH_5 >= 11
#        define BOOST_PP_ITERATION_5 11
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 12 && BOOST_PP_ITERATION_FINISH_5 >= 12
#        define BOOST_PP_ITERATION_5 12
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 13 && BOOST_PP_ITERATION_FINISH_5 >= 13
#        define BOOST_PP_ITERATION_5 13
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 14 && BOOST_PP_ITERATION_FINISH_5 >= 14
#        define BOOST_PP_ITERATION_5 14
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 15 && BOOST_PP_ITERATION_FINISH_5 >= 15
#        define BOOST_PP_ITERATION_5 15
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 16 && BOOST_PP_ITERATION_FINISH_5 >= 16
#        define BOOST_PP_ITERATION_5 16
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 17 && BOOST_PP_ITERATION_FINISH_5 >= 17
#        define BOOST_PP_ITERATION_5 17
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 18 && BOOST_PP_ITERATION_FINISH_5 >= 18
#        define BOOST_PP_ITERATION_5 18
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 19 && BOOST_PP_ITERATION_FINISH_5 >= 19
#        define BOOST_PP_ITERATION_5 19
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 20 && BOOST_PP_ITERATION_FINISH_5 >= 20
#        define BOOST_PP_ITERATION_5 20
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 21 && BOOST_PP_ITERATION_FINISH_5 >= 21
#        define BOOST_PP_ITERATION_5 21
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 22 && BOOST_PP_ITERATION_FINISH_5 >= 22
#        define BOOST_PP_ITERATION_5 22
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 23 && BOOST_PP_ITERATION_FINISH_5 >= 23
#        define BOOST_PP_ITERATION_5 23
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 24 && BOOST_PP_ITERATION_FINISH_5 >= 24
#        define BOOST_PP_ITERATION_5 24
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 25 && BOOST_PP_ITERATION_FINISH_5 >= 25
#        define BOOST_PP_ITERATION_5 25
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 26 && BOOST_PP_ITERATION_FINISH_5 >= 26
#        define BOOST_PP_ITERATION_5 26
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 27 && BOOST_PP_ITERATION_FINISH_5 >= 27
#        define BOOST_PP_ITERATION_5 27
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 28 && BOOST_PP_ITERATION_FINISH_5 >= 28
#        define BOOST_PP_ITERATION_5 28
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 29 && BOOST_PP_ITERATION_FINISH_5 >= 29
#        define BOOST_PP_ITERATION_5 29
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 30 && BOOST_PP_ITERATION_FINISH_5 >= 30
#        define BOOST_PP_ITERATION_5 30
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 31 && BOOST_PP_ITERATION_FINISH_5 >= 31
#        define BOOST_PP_ITERATION_5 31
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 32 && BOOST_PP_ITERATION_FINISH_5 >= 32
#        define BOOST_PP_ITERATION_5 32
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 33 && BOOST_PP_ITERATION_FINISH_5 >= 33
#        define BOOST_PP_ITERATION_5 33
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 34 && BOOST_PP_ITERATION_FINISH_5 >= 34
#        define BOOST_PP_ITERATION_5 34
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 35 && BOOST_PP_ITERATION_FINISH_5 >= 35
#        define BOOST_PP_ITERATION_5 35
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 36 && BOOST_PP_ITERATION_FINISH_5 >= 36
#        define BOOST_PP_ITERATION_5 36
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 37 && BOOST_PP_ITERATION_FINISH_5 >= 37
#        define BOOST_PP_ITERATION_5 37
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 38 && BOOST_PP_ITERATION_FINISH_5 >= 38
#        define BOOST_PP_ITERATION_5 38
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 39 && BOOST_PP_ITERATION_FINISH_5 >= 39
#        define BOOST_PP_ITERATION_5 39
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 40 && BOOST_PP_ITERATION_FINISH_5 >= 40
#        define BOOST_PP_ITERATION_5 40
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 41 && BOOST_PP_ITERATION_FINISH_5 >= 41
#        define BOOST_PP_ITERATION_5 41
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 42 && BOOST_PP_ITERATION_FINISH_5 >= 42
#        define BOOST_PP_ITERATION_5 42
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 43 && BOOST_PP_ITERATION_FINISH_5 >= 43
#        define BOOST_PP_ITERATION_5 43
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 44 && BOOST_PP_ITERATION_FINISH_5 >= 44
#        define BOOST_PP_ITERATION_5 44
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 45 && BOOST_PP_ITERATION_FINISH_5 >= 45
#        define BOOST_PP_ITERATION_5 45
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 46 && BOOST_PP_ITERATION_FINISH_5 >= 46
#        define BOOST_PP_ITERATION_5 46
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 47 && BOOST_PP_ITERATION_FINISH_5 >= 47
#        define BOOST_PP_ITERATION_5 47
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 48 && BOOST_PP_ITERATION_FINISH_5 >= 48
#        define BOOST_PP_ITERATION_5 48
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 49 && BOOST_PP_ITERATION_FINISH_5 >= 49
#        define BOOST_PP_ITERATION_5 49
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 50 && BOOST_PP_ITERATION_FINISH_5 >= 50
#        define BOOST_PP_ITERATION_5 50
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 51 && BOOST_PP_ITERATION_FINISH_5 >= 51
#        define BOOST_PP_ITERATION_5 51
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 52 && BOOST_PP_ITERATION_FINISH_5 >= 52
#        define BOOST_PP_ITERATION_5 52
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 53 && BOOST_PP_ITERATION_FINISH_5 >= 53
#        define BOOST_PP_ITERATION_5 53
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 54 && BOOST_PP_ITERATION_FINISH_5 >= 54
#        define BOOST_PP_ITERATION_5 54
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 55 && BOOST_PP_ITERATION_FINISH_5 >= 55
#        define BOOST_PP_ITERATION_5 55
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 56 && BOOST_PP_ITERATION_FINISH_5 >= 56
#        define BOOST_PP_ITERATION_5 56
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 57 && BOOST_PP_ITERATION_FINISH_5 >= 57
#        define BOOST_PP_ITERATION_5 57
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 58 && BOOST_PP_ITERATION_FINISH_5 >= 58
#        define BOOST_PP_ITERATION_5 58
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 59 && BOOST_PP_ITERATION_FINISH_5 >= 59
#        define BOOST_PP_ITERATION_5 59
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 60 && BOOST_PP_ITERATION_FINISH_5 >= 60
#        define BOOST_PP_ITERATION_5 60
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 61 && BOOST_PP_ITERATION_FINISH_5 >= 61
#        define BOOST_PP_ITERATION_5 61
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 62 && BOOST_PP_ITERATION_FINISH_5 >= 62
#        define BOOST_PP_ITERATION_5 62
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 63 && BOOST_PP_ITERATION_FINISH_5 >= 63
#        define BOOST_PP_ITERATION_5 63
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 64 && BOOST_PP_ITERATION_FINISH_5 >= 64
#        define BOOST_PP_ITERATION_5 64
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 65 && BOOST_PP_ITERATION_FINISH_5 >= 65
#        define BOOST_PP_ITERATION_5 65
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 66 && BOOST_PP_ITERATION_FINISH_5 >= 66
#        define BOOST_PP_ITERATION_5 66
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 67 && BOOST_PP_ITERATION_FINISH_5 >= 67
#        define BOOST_PP_ITERATION_5 67
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 68 && BOOST_PP_ITERATION_FINISH_5 >= 68
#        define BOOST_PP_ITERATION_5 68
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 69 && BOOST_PP_ITERATION_FINISH_5 >= 69
#        define BOOST_PP_ITERATION_5 69
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 70 && BOOST_PP_ITERATION_FINISH_5 >= 70
#        define BOOST_PP_ITERATION_5 70
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 71 && BOOST_PP_ITERATION_FINISH_5 >= 71
#        define BOOST_PP_ITERATION_5 71
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 72 && BOOST_PP_ITERATION_FINISH_5 >= 72
#        define BOOST_PP_ITERATION_5 72
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 73 && BOOST_PP_ITERATION_FINISH_5 >= 73
#        define BOOST_PP_ITERATION_5 73
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 74 && BOOST_PP_ITERATION_FINISH_5 >= 74
#        define BOOST_PP_ITERATION_5 74
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 75 && BOOST_PP_ITERATION_FINISH_5 >= 75
#        define BOOST_PP_ITERATION_5 75
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 76 && BOOST_PP_ITERATION_FINISH_5 >= 76
#        define BOOST_PP_ITERATION_5 76
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 77 && BOOST_PP_ITERATION_FINISH_5 >= 77
#        define BOOST_PP_ITERATION_5 77
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 78 && BOOST_PP_ITERATION_FINISH_5 >= 78
#        define BOOST_PP_ITERATION_5 78
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 79 && BOOST_PP_ITERATION_FINISH_5 >= 79
#        define BOOST_PP_ITERATION_5 79
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 80 && BOOST_PP_ITERATION_FINISH_5 >= 80
#        define BOOST_PP_ITERATION_5 80
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 81 && BOOST_PP_ITERATION_FINISH_5 >= 81
#        define BOOST_PP_ITERATION_5 81
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 82 && BOOST_PP_ITERATION_FINISH_5 >= 82
#        define BOOST_PP_ITERATION_5 82
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 83 && BOOST_PP_ITERATION_FINISH_5 >= 83
#        define BOOST_PP_ITERATION_5 83
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 84 && BOOST_PP_ITERATION_FINISH_5 >= 84
#        define BOOST_PP_ITERATION_5 84
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 85 && BOOST_PP_ITERATION_FINISH_5 >= 85
#        define BOOST_PP_ITERATION_5 85
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 86 && BOOST_PP_ITERATION_FINISH_5 >= 86
#        define BOOST_PP_ITERATION_5 86
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 87 && BOOST_PP_ITERATION_FINISH_5 >= 87
#        define BOOST_PP_ITERATION_5 87
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 88 && BOOST_PP_ITERATION_FINISH_5 >= 88
#        define BOOST_PP_ITERATION_5 88
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 89 && BOOST_PP_ITERATION_FINISH_5 >= 89
#        define BOOST_PP_ITERATION_5 89
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 90 && BOOST_PP_ITERATION_FINISH_5 >= 90
#        define BOOST_PP_ITERATION_5 90
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 91 && BOOST_PP_ITERATION_FINISH_5 >= 91
#        define BOOST_PP_ITERATION_5 91
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 92 && BOOST_PP_ITERATION_FINISH_5 >= 92
#        define BOOST_PP_ITERATION_5 92
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 93 && BOOST_PP_ITERATION_FINISH_5 >= 93
#        define BOOST_PP_ITERATION_5 93
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 94 && BOOST_PP_ITERATION_FINISH_5 >= 94
#        define BOOST_PP_ITERATION_5 94
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 95 && BOOST_PP_ITERATION_FINISH_5 >= 95
#        define BOOST_PP_ITERATION_5 95
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 96 && BOOST_PP_ITERATION_FINISH_5 >= 96
#        define BOOST_PP_ITERATION_5 96
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 97 && BOOST_PP_ITERATION_FINISH_5 >= 97
#        define BOOST_PP_ITERATION_5 97
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 98 && BOOST_PP_ITERATION_FINISH_5 >= 98
#        define BOOST_PP_ITERATION_5 98
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 99 && BOOST_PP_ITERATION_FINISH_5 >= 99
#        define BOOST_PP_ITERATION_5 99
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 100 && BOOST_PP_ITERATION_FINISH_5 >= 100
#        define BOOST_PP_ITERATION_5 100
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 101 && BOOST_PP_ITERATION_FINISH_5 >= 101
#        define BOOST_PP_ITERATION_5 101
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 102 && BOOST_PP_ITERATION_FINISH_5 >= 102
#        define BOOST_PP_ITERATION_5 102
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 103 && BOOST_PP_ITERATION_FINISH_5 >= 103
#        define BOOST_PP_ITERATION_5 103
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 104 && BOOST_PP_ITERATION_FINISH_5 >= 104
#        define BOOST_PP_ITERATION_5 104
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 105 && BOOST_PP_ITERATION_FINISH_5 >= 105
#        define BOOST_PP_ITERATION_5 105
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 106 && BOOST_PP_ITERATION_FINISH_5 >= 106
#        define BOOST_PP_ITERATION_5 106
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 107 && BOOST_PP_ITERATION_FINISH_5 >= 107
#        define BOOST_PP_ITERATION_5 107
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 108 && BOOST_PP_ITERATION_FINISH_5 >= 108
#        define BOOST_PP_ITERATION_5 108
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 109 && BOOST_PP_ITERATION_FINISH_5 >= 109
#        define BOOST_PP_ITERATION_5 109
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 110 && BOOST_PP_ITERATION_FINISH_5 >= 110
#        define BOOST_PP_ITERATION_5 110
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 111 && BOOST_PP_ITERATION_FINISH_5 >= 111
#        define BOOST_PP_ITERATION_5 111
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 112 && BOOST_PP_ITERATION_FINISH_5 >= 112
#        define BOOST_PP_ITERATION_5 112
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 113 && BOOST_PP_ITERATION_FINISH_5 >= 113
#        define BOOST_PP_ITERATION_5 113
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 114 && BOOST_PP_ITERATION_FINISH_5 >= 114
#        define BOOST_PP_ITERATION_5 114
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 115 && BOOST_PP_ITERATION_FINISH_5 >= 115
#        define BOOST_PP_ITERATION_5 115
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 116 && BOOST_PP_ITERATION_FINISH_5 >= 116
#        define BOOST_PP_ITERATION_5 116
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 117 && BOOST_PP_ITERATION_FINISH_5 >= 117
#        define BOOST_PP_ITERATION_5 117
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 118 && BOOST_PP_ITERATION_FINISH_5 >= 118
#        define BOOST_PP_ITERATION_5 118
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 119 && BOOST_PP_ITERATION_FINISH_5 >= 119
#        define BOOST_PP_ITERATION_5 119
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 120 && BOOST_PP_ITERATION_FINISH_5 >= 120
#        define BOOST_PP_ITERATION_5 120
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 121 && BOOST_PP_ITERATION_FINISH_5 >= 121
#        define BOOST_PP_ITERATION_5 121
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 122 && BOOST_PP_ITERATION_FINISH_5 >= 122
#        define BOOST_PP_ITERATION_5 122
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 123 && BOOST_PP_ITERATION_FINISH_5 >= 123
#        define BOOST_PP_ITERATION_5 123
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 124 && BOOST_PP_ITERATION_FINISH_5 >= 124
#        define BOOST_PP_ITERATION_5 124
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 125 && BOOST_PP_ITERATION_FINISH_5 >= 125
#        define BOOST_PP_ITERATION_5 125
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 126 && BOOST_PP_ITERATION_FINISH_5 >= 126
#        define BOOST_PP_ITERATION_5 126
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 127 && BOOST_PP_ITERATION_FINISH_5 >= 127
#        define BOOST_PP_ITERATION_5 127
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 128 && BOOST_PP_ITERATION_FINISH_5 >= 128
#        define BOOST_PP_ITERATION_5 128
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 129 && BOOST_PP_ITERATION_FINISH_5 >= 129
#        define BOOST_PP_ITERATION_5 129
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 130 && BOOST_PP_ITERATION_FINISH_5 >= 130
#        define BOOST_PP_ITERATION_5 130
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 131 && BOOST_PP_ITERATION_FINISH_5 >= 131
#        define BOOST_PP_ITERATION_5 131
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 132 && BOOST_PP_ITERATION_FINISH_5 >= 132
#        define BOOST_PP_ITERATION_5 132
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 133 && BOOST_PP_ITERATION_FINISH_5 >= 133
#        define BOOST_PP_ITERATION_5 133
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 134 && BOOST_PP_ITERATION_FINISH_5 >= 134
#        define BOOST_PP_ITERATION_5 134
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 135 && BOOST_PP_ITERATION_FINISH_5 >= 135
#        define BOOST_PP_ITERATION_5 135
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 136 && BOOST_PP_ITERATION_FINISH_5 >= 136
#        define BOOST_PP_ITERATION_5 136
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 137 && BOOST_PP_ITERATION_FINISH_5 >= 137
#        define BOOST_PP_ITERATION_5 137
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 138 && BOOST_PP_ITERATION_FINISH_5 >= 138
#        define BOOST_PP_ITERATION_5 138
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 139 && BOOST_PP_ITERATION_FINISH_5 >= 139
#        define BOOST_PP_ITERATION_5 139
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 140 && BOOST_PP_ITERATION_FINISH_5 >= 140
#        define BOOST_PP_ITERATION_5 140
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 141 && BOOST_PP_ITERATION_FINISH_5 >= 141
#        define BOOST_PP_ITERATION_5 141
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 142 && BOOST_PP_ITERATION_FINISH_5 >= 142
#        define BOOST_PP_ITERATION_5 142
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 143 && BOOST_PP_ITERATION_FINISH_5 >= 143
#        define BOOST_PP_ITERATION_5 143
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 144 && BOOST_PP_ITERATION_FINISH_5 >= 144
#        define BOOST_PP_ITERATION_5 144
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 145 && BOOST_PP_ITERATION_FINISH_5 >= 145
#        define BOOST_PP_ITERATION_5 145
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 146 && BOOST_PP_ITERATION_FINISH_5 >= 146
#        define BOOST_PP_ITERATION_5 146
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 147 && BOOST_PP_ITERATION_FINISH_5 >= 147
#        define BOOST_PP_ITERATION_5 147
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 148 && BOOST_PP_ITERATION_FINISH_5 >= 148
#        define BOOST_PP_ITERATION_5 148
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 149 && BOOST_PP_ITERATION_FINISH_5 >= 149
#        define BOOST_PP_ITERATION_5 149
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 150 && BOOST_PP_ITERATION_FINISH_5 >= 150
#        define BOOST_PP_ITERATION_5 150
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 151 && BOOST_PP_ITERATION_FINISH_5 >= 151
#        define BOOST_PP_ITERATION_5 151
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 152 && BOOST_PP_ITERATION_FINISH_5 >= 152
#        define BOOST_PP_ITERATION_5 152
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 153 && BOOST_PP_ITERATION_FINISH_5 >= 153
#        define BOOST_PP_ITERATION_5 153
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 154 && BOOST_PP_ITERATION_FINISH_5 >= 154
#        define BOOST_PP_ITERATION_5 154
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 155 && BOOST_PP_ITERATION_FINISH_5 >= 155
#        define BOOST_PP_ITERATION_5 155
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 156 && BOOST_PP_ITERATION_FINISH_5 >= 156
#        define BOOST_PP_ITERATION_5 156
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 157 && BOOST_PP_ITERATION_FINISH_5 >= 157
#        define BOOST_PP_ITERATION_5 157
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 158 && BOOST_PP_ITERATION_FINISH_5 >= 158
#        define BOOST_PP_ITERATION_5 158
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 159 && BOOST_PP_ITERATION_FINISH_5 >= 159
#        define BOOST_PP_ITERATION_5 159
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 160 && BOOST_PP_ITERATION_FINISH_5 >= 160
#        define BOOST_PP_ITERATION_5 160
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 161 && BOOST_PP_ITERATION_FINISH_5 >= 161
#        define BOOST_PP_ITERATION_5 161
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 162 && BOOST_PP_ITERATION_FINISH_5 >= 162
#        define BOOST_PP_ITERATION_5 162
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 163 && BOOST_PP_ITERATION_FINISH_5 >= 163
#        define BOOST_PP_ITERATION_5 163
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 164 && BOOST_PP_ITERATION_FINISH_5 >= 164
#        define BOOST_PP_ITERATION_5 164
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 165 && BOOST_PP_ITERATION_FINISH_5 >= 165
#        define BOOST_PP_ITERATION_5 165
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 166 && BOOST_PP_ITERATION_FINISH_5 >= 166
#        define BOOST_PP_ITERATION_5 166
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 167 && BOOST_PP_ITERATION_FINISH_5 >= 167
#        define BOOST_PP_ITERATION_5 167
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 168 && BOOST_PP_ITERATION_FINISH_5 >= 168
#        define BOOST_PP_ITERATION_5 168
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 169 && BOOST_PP_ITERATION_FINISH_5 >= 169
#        define BOOST_PP_ITERATION_5 169
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 170 && BOOST_PP_ITERATION_FINISH_5 >= 170
#        define BOOST_PP_ITERATION_5 170
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 171 && BOOST_PP_ITERATION_FINISH_5 >= 171
#        define BOOST_PP_ITERATION_5 171
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 172 && BOOST_PP_ITERATION_FINISH_5 >= 172
#        define BOOST_PP_ITERATION_5 172
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 173 && BOOST_PP_ITERATION_FINISH_5 >= 173
#        define BOOST_PP_ITERATION_5 173
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 174 && BOOST_PP_ITERATION_FINISH_5 >= 174
#        define BOOST_PP_ITERATION_5 174
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 175 && BOOST_PP_ITERATION_FINISH_5 >= 175
#        define BOOST_PP_ITERATION_5 175
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 176 && BOOST_PP_ITERATION_FINISH_5 >= 176
#        define BOOST_PP_ITERATION_5 176
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 177 && BOOST_PP_ITERATION_FINISH_5 >= 177
#        define BOOST_PP_ITERATION_5 177
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 178 && BOOST_PP_ITERATION_FINISH_5 >= 178
#        define BOOST_PP_ITERATION_5 178
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 179 && BOOST_PP_ITERATION_FINISH_5 >= 179
#        define BOOST_PP_ITERATION_5 179
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 180 && BOOST_PP_ITERATION_FINISH_5 >= 180
#        define BOOST_PP_ITERATION_5 180
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 181 && BOOST_PP_ITERATION_FINISH_5 >= 181
#        define BOOST_PP_ITERATION_5 181
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 182 && BOOST_PP_ITERATION_FINISH_5 >= 182
#        define BOOST_PP_ITERATION_5 182
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 183 && BOOST_PP_ITERATION_FINISH_5 >= 183
#        define BOOST_PP_ITERATION_5 183
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 184 && BOOST_PP_ITERATION_FINISH_5 >= 184
#        define BOOST_PP_ITERATION_5 184
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 185 && BOOST_PP_ITERATION_FINISH_5 >= 185
#        define BOOST_PP_ITERATION_5 185
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 186 && BOOST_PP_ITERATION_FINISH_5 >= 186
#        define BOOST_PP_ITERATION_5 186
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 187 && BOOST_PP_ITERATION_FINISH_5 >= 187
#        define BOOST_PP_ITERATION_5 187
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 188 && BOOST_PP_ITERATION_FINISH_5 >= 188
#        define BOOST_PP_ITERATION_5 188
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 189 && BOOST_PP_ITERATION_FINISH_5 >= 189
#        define BOOST_PP_ITERATION_5 189
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 190 && BOOST_PP_ITERATION_FINISH_5 >= 190
#        define BOOST_PP_ITERATION_5 190
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 191 && BOOST_PP_ITERATION_FINISH_5 >= 191
#        define BOOST_PP_ITERATION_5 191
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 192 && BOOST_PP_ITERATION_FINISH_5 >= 192
#        define BOOST_PP_ITERATION_5 192
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 193 && BOOST_PP_ITERATION_FINISH_5 >= 193
#        define BOOST_PP_ITERATION_5 193
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 194 && BOOST_PP_ITERATION_FINISH_5 >= 194
#        define BOOST_PP_ITERATION_5 194
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 195 && BOOST_PP_ITERATION_FINISH_5 >= 195
#        define BOOST_PP_ITERATION_5 195
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 196 && BOOST_PP_ITERATION_FINISH_5 >= 196
#        define BOOST_PP_ITERATION_5 196
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 197 && BOOST_PP_ITERATION_FINISH_5 >= 197
#        define BOOST_PP_ITERATION_5 197
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 198 && BOOST_PP_ITERATION_FINISH_5 >= 198
#        define BOOST_PP_ITERATION_5 198
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 199 && BOOST_PP_ITERATION_FINISH_5 >= 199
#        define BOOST_PP_ITERATION_5 199
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 200 && BOOST_PP_ITERATION_FINISH_5 >= 200
#        define BOOST_PP_ITERATION_5 200
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 201 && BOOST_PP_ITERATION_FINISH_5 >= 201
#        define BOOST_PP_ITERATION_5 201
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 202 && BOOST_PP_ITERATION_FINISH_5 >= 202
#        define BOOST_PP_ITERATION_5 202
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 203 && BOOST_PP_ITERATION_FINISH_5 >= 203
#        define BOOST_PP_ITERATION_5 203
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 204 && BOOST_PP_ITERATION_FINISH_5 >= 204
#        define BOOST_PP_ITERATION_5 204
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 205 && BOOST_PP_ITERATION_FINISH_5 >= 205
#        define BOOST_PP_ITERATION_5 205
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 206 && BOOST_PP_ITERATION_FINISH_5 >= 206
#        define BOOST_PP_ITERATION_5 206
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 207 && BOOST_PP_ITERATION_FINISH_5 >= 207
#        define BOOST_PP_ITERATION_5 207
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 208 && BOOST_PP_ITERATION_FINISH_5 >= 208
#        define BOOST_PP_ITERATION_5 208
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 209 && BOOST_PP_ITERATION_FINISH_5 >= 209
#        define BOOST_PP_ITERATION_5 209
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 210 && BOOST_PP_ITERATION_FINISH_5 >= 210
#        define BOOST_PP_ITERATION_5 210
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 211 && BOOST_PP_ITERATION_FINISH_5 >= 211
#        define BOOST_PP_ITERATION_5 211
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 212 && BOOST_PP_ITERATION_FINISH_5 >= 212
#        define BOOST_PP_ITERATION_5 212
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 213 && BOOST_PP_ITERATION_FINISH_5 >= 213
#        define BOOST_PP_ITERATION_5 213
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 214 && BOOST_PP_ITERATION_FINISH_5 >= 214
#        define BOOST_PP_ITERATION_5 214
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 215 && BOOST_PP_ITERATION_FINISH_5 >= 215
#        define BOOST_PP_ITERATION_5 215
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 216 && BOOST_PP_ITERATION_FINISH_5 >= 216
#        define BOOST_PP_ITERATION_5 216
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 217 && BOOST_PP_ITERATION_FINISH_5 >= 217
#        define BOOST_PP_ITERATION_5 217
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 218 && BOOST_PP_ITERATION_FINISH_5 >= 218
#        define BOOST_PP_ITERATION_5 218
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 219 && BOOST_PP_ITERATION_FINISH_5 >= 219
#        define BOOST_PP_ITERATION_5 219
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 220 && BOOST_PP_ITERATION_FINISH_5 >= 220
#        define BOOST_PP_ITERATION_5 220
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 221 && BOOST_PP_ITERATION_FINISH_5 >= 221
#        define BOOST_PP_ITERATION_5 221
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 222 && BOOST_PP_ITERATION_FINISH_5 >= 222
#        define BOOST_PP_ITERATION_5 222
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 223 && BOOST_PP_ITERATION_FINISH_5 >= 223
#        define BOOST_PP_ITERATION_5 223
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 224 && BOOST_PP_ITERATION_FINISH_5 >= 224
#        define BOOST_PP_ITERATION_5 224
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 225 && BOOST_PP_ITERATION_FINISH_5 >= 225
#        define BOOST_PP_ITERATION_5 225
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 226 && BOOST_PP_ITERATION_FINISH_5 >= 226
#        define BOOST_PP_ITERATION_5 226
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 227 && BOOST_PP_ITERATION_FINISH_5 >= 227
#        define BOOST_PP_ITERATION_5 227
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 228 && BOOST_PP_ITERATION_FINISH_5 >= 228
#        define BOOST_PP_ITERATION_5 228
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 229 && BOOST_PP_ITERATION_FINISH_5 >= 229
#        define BOOST_PP_ITERATION_5 229
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 230 && BOOST_PP_ITERATION_FINISH_5 >= 230
#        define BOOST_PP_ITERATION_5 230
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 231 && BOOST_PP_ITERATION_FINISH_5 >= 231
#        define BOOST_PP_ITERATION_5 231
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 232 && BOOST_PP_ITERATION_FINISH_5 >= 232
#        define BOOST_PP_ITERATION_5 232
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 233 && BOOST_PP_ITERATION_FINISH_5 >= 233
#        define BOOST_PP_ITERATION_5 233
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 234 && BOOST_PP_ITERATION_FINISH_5 >= 234
#        define BOOST_PP_ITERATION_5 234
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 235 && BOOST_PP_ITERATION_FINISH_5 >= 235
#        define BOOST_PP_ITERATION_5 235
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 236 && BOOST_PP_ITERATION_FINISH_5 >= 236
#        define BOOST_PP_ITERATION_5 236
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 237 && BOOST_PP_ITERATION_FINISH_5 >= 237
#        define BOOST_PP_ITERATION_5 237
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 238 && BOOST_PP_ITERATION_FINISH_5 >= 238
#        define BOOST_PP_ITERATION_5 238
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 239 && BOOST_PP_ITERATION_FINISH_5 >= 239
#        define BOOST_PP_ITERATION_5 239
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 240 && BOOST_PP_ITERATION_FINISH_5 >= 240
#        define BOOST_PP_ITERATION_5 240
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 241 && BOOST_PP_ITERATION_FINISH_5 >= 241
#        define BOOST_PP_ITERATION_5 241
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 242 && BOOST_PP_ITERATION_FINISH_5 >= 242
#        define BOOST_PP_ITERATION_5 242
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 243 && BOOST_PP_ITERATION_FINISH_5 >= 243
#        define BOOST_PP_ITERATION_5 243
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 244 && BOOST_PP_ITERATION_FINISH_5 >= 244
#        define BOOST_PP_ITERATION_5 244
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 245 && BOOST_PP_ITERATION_FINISH_5 >= 245
#        define BOOST_PP_ITERATION_5 245
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 246 && BOOST_PP_ITERATION_FINISH_5 >= 246
#        define BOOST_PP_ITERATION_5 246
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 247 && BOOST_PP_ITERATION_FINISH_5 >= 247
#        define BOOST_PP_ITERATION_5 247
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 248 && BOOST_PP_ITERATION_FINISH_5 >= 248
#        define BOOST_PP_ITERATION_5 248
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 249 && BOOST_PP_ITERATION_FINISH_5 >= 249
#        define BOOST_PP_ITERATION_5 249
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 250 && BOOST_PP_ITERATION_FINISH_5 >= 250
#        define BOOST_PP_ITERATION_5 250
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 251 && BOOST_PP_ITERATION_FINISH_5 >= 251
#        define BOOST_PP_ITERATION_5 251
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 252 && BOOST_PP_ITERATION_FINISH_5 >= 252
#        define BOOST_PP_ITERATION_5 252
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 253 && BOOST_PP_ITERATION_FINISH_5 >= 253
#        define BOOST_PP_ITERATION_5 253
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 254 && BOOST_PP_ITERATION_FINISH_5 >= 254
#        define BOOST_PP_ITERATION_5 254
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 255 && BOOST_PP_ITERATION_FINISH_5 >= 255
#        define BOOST_PP_ITERATION_5 255
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
#    if BOOST_PP_ITERATION_START_5 <= 256 && BOOST_PP_ITERATION_FINISH_5 >= 256
#        define BOOST_PP_ITERATION_5 256
#        include BOOST_PP_FILENAME_5
#        undef BOOST_PP_ITERATION_5
#    endif
# endif
#
# undef BOOST_PP_ITERATION_DEPTH
# define BOOST_PP_ITERATION_DEPTH() 4
#
# undef BOOST_PP_ITERATION_START_5
# undef BOOST_PP_ITERATION_FINISH_5
# undef BOOST_PP_FILENAME_5
#
# undef BOOST_PP_ITERATION_FLAGS_5
# undef BOOST_PP_ITERATION_PARAMS_5


code:
// ------------------------------------------------------------------------------
// Copyright (c) 2000 Cadenza New Zealand Ltd
// Distributed under the Boost Software License, Version 1.0. (See accompany-
// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// ------------------------------------------------------------------------------
// Boost functional.hpp header file
// See http://www.boost.org/libs/functional for documentation.
// ------------------------------------------------------------------------------
// $Id$
// ------------------------------------------------------------------------------

#ifndef BOOST_FUNCTIONAL_HPP
#define BOOST_FUNCTIONAL_HPP

#include <boost/config.hpp>
#include <boost/call_traits.hpp>
#include <functional>

namespace boost
{
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
    // --------------------------------------------------------------------------
    // The following traits classes allow us to avoid the need for ptr_fun
    // because the types of arguments and the result of a function can be
    // deduced.
    //
    // In addition to the standard types defined in unary_function and
    // binary_function, we add
    //
    // - function_type, the type of the function or function object itself.
    //
    // - param_type, the type that should be used for passing the function or
    //   function object as an argument.
    // --------------------------------------------------------------------------
    namespace detail
    {
        template <class Operation>
        struct unary_traits_imp;

        template <class Operation>
        struct unary_traits_imp<Operation*>
        {
            typedef Operation                         function_type;
            typedef const function_type &             param_type;
            typedef typename Operation::result_type   result_type;
            typedef typename Operation::argument_type argument_type;
        };

        template <class R, class A>
        struct unary_traits_imp<R(*)(A)>
        {
            typedef R (*function_type)(A);
            typedef R (*param_type)(A);
            typedef R result_type;
            typedef A argument_type;
        };

        template <class Operation>
        struct binary_traits_imp;

        template <class Operation>
        struct binary_traits_imp<Operation*>
        {
            typedef Operation                                function_type;
            typedef const function_type &                    param_type;
            typedef typename Operation::result_type          result_type;
            typedef typename Operation::first_argument_type  first_argument_type;
            typedef typename Operation::second_argument_type second_argument_type;
        };

        template <class R, class A1, class A2>
        struct binary_traits_imp<R(*)(A1,A2)>
        {
            typedef R (*function_type)(A1,A2);
            typedef R (*param_type)(A1,A2);
            typedef R result_type;
            typedef A1 first_argument_type;
            typedef A2 second_argument_type;
        };
    } // namespace detail

    template <class Operation>
    struct unary_traits
    {
        typedef typename detail::unary_traits_imp<Operation*>::function_type function_type;
        typedef typename detail::unary_traits_imp<Operation*>::param_type    param_type;
        typedef typename detail::unary_traits_imp<Operation*>::result_type   result_type;
        typedef typename detail::unary_traits_imp<Operation*>::argument_type argument_type;
    };

    template <class R, class A>
    struct unary_traits<R(*)(A)>
    {
        typedef R (*function_type)(A);
        typedef R (*param_type)(A);
        typedef R result_type;
        typedef A argument_type;
    };

    template <class Operation>
    struct binary_traits
    {
        typedef typename detail::binary_traits_imp<Operation*>::function_type        function_type;
        typedef typename detail::binary_traits_imp<Operation*>::param_type           param_type;
        typedef typename detail::binary_traits_imp<Operation*>::result_type          result_type;
        typedef typename detail::binary_traits_imp<Operation*>::first_argument_type  first_argument_type;
        typedef typename detail::binary_traits_imp<Operation*>::second_argument_type second_argument_type;
    };

    template <class R, class A1, class A2>
    struct binary_traits<R(*)(A1,A2)>
    {
        typedef R (*function_type)(A1,A2);
        typedef R (*param_type)(A1,A2);
        typedef R result_type;
        typedef A1 first_argument_type;
        typedef A2 second_argument_type;
    };
#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
    // --------------------------------------------------------------------------
    // If we have no partial specialisation available, decay to a situation
    // that is no worse than in the Standard, i.e., ptr_fun will be required.
    // --------------------------------------------------------------------------

    template <class Operation>
    struct unary_traits
    {
        typedef Operation                         function_type;
        typedef const Operation&                  param_type;
        typedef typename Operation::result_type   result_type;
        typedef typename Operation::argument_type argument_type;
    };

    template <class Operation>
    struct binary_traits
    {
        typedef Operation                                function_type;
        typedef const Operation &                        param_type;
        typedef typename Operation::result_type          result_type;
        typedef typename Operation::first_argument_type  first_argument_type;
        typedef typename Operation::second_argument_type second_argument_type;
    };
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION

    // --------------------------------------------------------------------------
    // unary_negate, not1
    // --------------------------------------------------------------------------
    template <class Predicate>
    class unary_negate
        : public std::unary_function<typename unary_traits<Predicate>::argument_type,bool>
    {
      public:
        explicit unary_negate(typename unary_traits<Predicate>::param_type x)
            :
            pred(x)
        {}
        bool operator()(typename call_traits<typename unary_traits<Predicate>::argument_type>::param_type x) const
        {
            return !pred(x);
        }
      private:
        typename unary_traits<Predicate>::function_type pred;
    };

    template <class Predicate>
    unary_negate<Predicate> not1(const Predicate &pred)
    {
        // The cast is to placate Borland C++Builder in certain circumstances.
        // I don't think it should be necessary.
        return unary_negate<Predicate>((typename unary_traits<Predicate>::param_type)pred);
    }

    template <class Predicate>
    unary_negate<Predicate> not1(Predicate &pred)
    {
        return unary_negate<Predicate>(pred);
    }

    // --------------------------------------------------------------------------
    // binary_negate, not2
    // --------------------------------------------------------------------------
    template <class Predicate>
    class binary_negate
        : public std::binary_function<typename binary_traits<Predicate>::first_argument_type,
                                      typename binary_traits<Predicate>::second_argument_type,
                                      bool>
    {
      public:
        explicit binary_negate(typename binary_traits<Predicate>::param_type x)
            :
            pred(x)
        {}
        bool operator()(typename call_traits<typename binary_traits<Predicate>::first_argument_type>::param_type x,
                        typename call_traits<typename binary_traits<Predicate>::second_argument_type>::param_type y) const
        {
            return !pred(x,y);
        }
      private:
        typename binary_traits<Predicate>::function_type pred;
    };

    template <class Predicate>
    binary_negate<Predicate> not2(const Predicate &pred)
    {
        // The cast is to placate Borland C++Builder in certain circumstances.
        // I don't think it should be necessary.
        return binary_negate<Predicate>((typename binary_traits<Predicate>::param_type)pred);
    }

    template <class Predicate>
    binary_negate<Predicate> not2(Predicate &pred)
    {
        return binary_negate<Predicate>(pred);
    }

    // --------------------------------------------------------------------------
    // binder1st, bind1st
    // --------------------------------------------------------------------------
    template <class Operation>
    class binder1st
        : public std::unary_function<typename binary_traits<Operation>::second_argument_type,
                                     typename binary_traits<Operation>::result_type>
    {
      public:
        binder1st(typename binary_traits<Operation>::param_type x,
                  typename call_traits<typename binary_traits<Operation>::first_argument_type>::param_type y)
            :
            op(x), value(y)
        {}

        typename binary_traits<Operation>::result_type
        operator()(typename call_traits<typename binary_traits<Operation>::second_argument_type>::param_type x) const
        {
            return op(value, x);
        }

      protected:
        typename binary_traits<Operation>::function_type op;
        typename binary_traits<Operation>::first_argument_type value;
    };

    template <class Operation>
    inline binder1st<Operation> bind1st(const Operation &op,
                                        typename call_traits<
                                                    typename binary_traits<Operation>::first_argument_type
                                        >::param_type x)
    {
        // The cast is to placate Borland C++Builder in certain circumstances.
        // I don't think it should be necessary.
        return binder1st<Operation>((typename binary_traits<Operation>::param_type)op, x);
    }

    template <class Operation>
    inline binder1st<Operation> bind1st(Operation &op,
                                        typename call_traits<
                                                    typename binary_traits<Operation>::first_argument_type
                                        >::param_type x)
    {
        return binder1st<Operation>(op, x);
    }

    // --------------------------------------------------------------------------
    // binder2nd, bind2nd
    // --------------------------------------------------------------------------
    template <class Operation>
    class binder2nd
        : public std::unary_function<typename binary_traits<Operation>::first_argument_type,
                                     typename binary_traits<Operation>::result_type>
    {
      public:
        binder2nd(typename binary_traits<Operation>::param_type x,
                  typename call_traits<typename binary_traits<Operation>::second_argument_type>::param_type y)
            :
            op(x), value(y)
        {}

        typename binary_traits<Operation>::result_type
        operator()(typename call_traits<typename binary_traits<Operation>::first_argument_type>::param_type x) const
        {
            return op(x, value);
        }

      protected:
        typename binary_traits<Operation>::function_type op;
        typename binary_traits<Operation>::second_argument_type value;
    };

    template <class Operation>
    inline binder2nd<Operation> bind2nd(const Operation &op,
                                        typename call_traits<
                                                    typename binary_traits<Operation>::second_argument_type
                                        >::param_type x)
    {
        // The cast is to placate Borland C++Builder in certain circumstances.
        // I don't think it should be necessary.
        return binder2nd<Operation>((typename binary_traits<Operation>::param_type)op, x);
    }

    template <class Operation>
    inline binder2nd<Operation> bind2nd(Operation &op,
                                        typename call_traits<
                                                    typename binary_traits<Operation>::second_argument_type
                                        >::param_type x)
    {
        return binder2nd<Operation>(op, x);
    }

    // --------------------------------------------------------------------------
    // mem_fun, etc
    // --------------------------------------------------------------------------
    template <class S, class T>
    class mem_fun_t : public std::unary_function<T*, S>
    {
      public:
        explicit mem_fun_t(S (T::*p)())
            :
            ptr(p)
        {}
        S operator()(T* p) const
        {
            return (p->*ptr)();
        }
      private:
        S (T::*ptr)();
    };

    template <class S, class T, class A>
    class mem_fun1_t : public std::binary_function<T*, A, S>
    {
      public:
        explicit mem_fun1_t(S (T::*p)(A))
            :
            ptr(p)
        {}
        S operator()(T* p, typename call_traits<A>::param_type x) const
        {
            return (p->*ptr)(x);
        }
      private:
        S (T::*ptr)(A);
    };

    template <class S, class T>
    class const_mem_fun_t : public std::unary_function<const T*, S>
    {
      public:
        explicit const_mem_fun_t(S (T::*p)() const)
            :
            ptr(p)
        {}
        S operator()(const T* p) const
        {
            return (p->*ptr)();
        }
      private:
        S (T::*ptr)() const;
    };

    template <class S, class T, class A>
    class const_mem_fun1_t : public std::binary_function<const T*, A, S>
    {
      public:
        explicit const_mem_fun1_t(S (T::*p)(A) const)
            :
            ptr(p)
        {}
        S operator()(const T* p, typename call_traits<A>::param_type x) const
        {
            return (p->*ptr)(x);
        }
      private:
        S (T::*ptr)(A) const;
    };

    template<class S, class T>
    inline mem_fun_t<S,T> mem_fun(S (T::*f)())
    {
        return mem_fun_t<S,T>(f);
    }

    template<class S, class T, class A>
    inline mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A))
    {
        return mem_fun1_t<S,T,A>(f);
    }

#ifndef BOOST_NO_POINTER_TO_MEMBER_CONST
    template<class S, class T>
    inline const_mem_fun_t<S,T> mem_fun(S (T::*f)() const)
    {
        return const_mem_fun_t<S,T>(f);
    }

    template<class S, class T, class A>
    inline const_mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A) const)
    {
        return const_mem_fun1_t<S,T,A>(f);
    }
#endif // BOOST_NO_POINTER_TO_MEMBER_CONST

    // --------------------------------------------------------------------------
    // mem_fun_ref, etc
    // --------------------------------------------------------------------------
    template <class S, class T>
    class mem_fun_ref_t : public std::unary_function<T&, S>
    {
      public:
        explicit mem_fun_ref_t(S (T::*p)())
            :
            ptr(p)
        {}
        S operator()(T& p) const
        {
            return (p.*ptr)();
        }
      private:
        S (T::*ptr)();
    };

    template <class S, class T, class A>
    class mem_fun1_ref_t : public std::binary_function<T&, A, S>
    {
      public:
        explicit mem_fun1_ref_t(S (T::*p)(A))
            :
            ptr(p)
        {}
        S operator()(T& p, typename call_traits<A>::param_type x) const
        {
            return (p.*ptr)(x);
        }
      private:
        S (T::*ptr)(A);
    };

    template <class S, class T>
    class const_mem_fun_ref_t : public std::unary_function<const T&, S>
    {
      public:
        explicit const_mem_fun_ref_t(S (T::*p)() const)
            :
            ptr(p)
        {}

        S operator()(const T &p) const
        {
            return (p.*ptr)();
        }
      private:
        S (T::*ptr)() const;
    };

    template <class S, class T, class A>
    class const_mem_fun1_ref_t : public std::binary_function<const T&, A, S>
    {
      public:
        explicit const_mem_fun1_ref_t(S (T::*p)(A) const)
            :
            ptr(p)
        {}

        S operator()(const T& p, typename call_traits<A>::param_type x) const
        {
            return (p.*ptr)(x);
        }
      private:
        S (T::*ptr)(A) const;
    };

    template<class S, class T>
    inline mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)())
    {
        return mem_fun_ref_t<S,T>(f);
    }

    template<class S, class T, class A>
    inline mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A))
    {
        return mem_fun1_ref_t<S,T,A>(f);
    }

#ifndef BOOST_NO_POINTER_TO_MEMBER_CONST
    template<class S, class T>
    inline const_mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)() const)
    {
        return const_mem_fun_ref_t<S,T>(f);
    }

    template<class S, class T, class A>
    inline const_mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A) const)
    {
        return const_mem_fun1_ref_t<S,T,A>(f);
    }
#endif // BOOST_NO_POINTER_TO_MEMBER_CONST

    // --------------------------------------------------------------------------
    // ptr_fun
    // --------------------------------------------------------------------------
    template <class Arg, class Result>
    class pointer_to_unary_function : public std::unary_function<Arg,Result>
    {
      public:
        explicit pointer_to_unary_function(Result (*f)(Arg))
            :
            func(f)
        {}

        Result operator()(typename call_traits<Arg>::param_type x) const
        {
            return func(x);
        }

      private:
        Result (*func)(Arg);
    };

    template <class Arg, class Result>
    inline pointer_to_unary_function<Arg,Result> ptr_fun(Result (*f)(Arg))
    {
        return pointer_to_unary_function<Arg,Result>(f);
    }

    template <class Arg1, class Arg2, class Result>
    class pointer_to_binary_function : public std::binary_function<Arg1,Arg2,Result>
    {
      public:
        explicit pointer_to_binary_function(Result (*f)(Arg1, Arg2))
            :
            func(f)
        {}

        Result operator()(typename call_traits<Arg1>::param_type x, typename call_traits<Arg2>::param_type y) const
        {
            return func(x,y);
        }

      private:
        Result (*func)(Arg1, Arg2);
    };

    template <class Arg1, class Arg2, class Result>
    inline pointer_to_binary_function<Arg1,Arg2,Result> ptr_fun(Result (*f)(Arg1, Arg2))
    {
        return pointer_to_binary_function<Arg1,Arg2,Result>(f);
    }
} // namespace boost

#endif


code:
///////////////////////////////////////////////////////////////////////////////
/// \file pass_through.hpp
///
/// Definition of the pass_through transform, which is the default transform
/// of all of the expression generator metafunctions such as unary_plus<>, plus<>
/// and nary_expr<>.
//
//  Copyright 2008 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_TRANSFORM_PASS_THROUGH_HPP_EAN_12_26_2006
#define BOOST_PROTO_TRANSFORM_PASS_THROUGH_HPP_EAN_12_26_2006

#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/repetition/enum.hpp>
#include <boost/preprocessor/iteration/iterate.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/proto/proto_fwd.hpp>
#include <boost/proto/args.hpp>
#include <boost/proto/transform/impl.hpp>
#include <boost/proto/detail/ignore_unused.hpp>

#if defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined
#endif

namespace boost { namespace proto
{
    namespace detail
    {
        template<
            typename Grammar
          , typename Domain
          , typename Expr
          , typename State
          , typename Data
          , long Arity = arity_of<Expr>::value
        >
        struct pass_through_impl
        {};

        #include <boost/proto/transform/detail/pass_through_impl.hpp>

        template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
        struct pass_through_impl<Grammar, Domain, Expr, State, Data, 0>
          : transform_impl<Expr, State, Data>
        {
            typedef Expr result_type;

            /// \param e An expression
            /// \return \c e
            /// \throw nothrow
            BOOST_FORCEINLINE
            BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename pass_through_impl::expr_param)
            operator()(
                typename pass_through_impl::expr_param e
              , typename pass_through_impl::state_param
              , typename pass_through_impl::data_param
            ) const
            {
                return e;
            }
        };

    } // namespace detail

    /// \brief A PrimitiveTransform that transforms the child expressions
    /// of an expression node according to the corresponding children of
    /// a Grammar.
    ///
    /// Given a Grammar such as <tt>plus\<T0, T1\></tt>, an expression type
    /// that matches the grammar such as <tt>plus\<E0, E1\>::type</tt>, a
    /// state \c S and a data \c V, the result of applying the
    /// <tt>pass_through\<plus\<T0, T1\> \></tt> transform is:
    ///
    /// \code
    /// plus<
    ///     T0::result<T0(E0, S, V)>::type
    ///   , T1::result<T1(E1, S, V)>::type
    /// >::type
    /// \endcode
    ///
    /// The above demonstrates how child transforms and child expressions
    /// are applied pairwise, and how the results are reassembled into a new
    /// expression node with the same tag type as the original.
    ///
    /// The explicit use of <tt>pass_through\<\></tt> is not usually needed,
    /// since the expression generator metafunctions such as
    /// <tt>plus\<\></tt> have <tt>pass_through\<\></tt> as their default
    /// transform. So, for instance, these are equivalent:
    ///
    /// \code
    /// // Within a grammar definition, these are equivalent:
    /// when< plus<X, Y>, pass_through< plus<X, Y> > >
    /// when< plus<X, Y>, plus<X, Y> >
    /// when< plus<X, Y> > // because of when<class X, class Y=X>
    /// plus<X, Y>         // because plus<> is both a
    ///                    //   grammar and a transform
    /// \endcode
    ///
    /// For example, consider the following transform that promotes all
    /// \c float terminals in an expression to \c double.
    ///
    /// \code
    /// // This transform finds all float terminals in an expression and promotes
    /// // them to doubles.
    /// struct Promote
    ///  : or_<
    ///         when<terminal<float>, terminal<double>::type(_value) >
    ///         // terminal<>'s default transform is a no-op:
    ///       , terminal<_>
    ///         // nary_expr<> has a pass_through<> transform:
    ///       , nary_expr<_, vararg<Promote> >
    ///     >
    /// {};
    /// \endcode
    template<typename Grammar, typename Domain /* = deduce_domain*/>
    struct pass_through
      : transform<pass_through<Grammar, Domain> >
    {
        template<typename Expr, typename State, typename Data>
        struct impl
          : detail::pass_through_impl<Grammar, Domain, Expr, State, Data>
        {};
    };

    /// INTERNAL ONLY
    ///
    template<typename Grammar, typename Domain>
    struct is_callable<pass_through<Grammar, Domain> >
      : mpl::true_
    {};

}} // namespace boost::proto

#if defined(_MSC_VER)
# pragma warning(pop)
#endif

#endif


code:
//  (C) Copyright John Maddock 2007.
//  Use, modification and distribution are subject to 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)
//
//  This file is machine generated, do not edit by hand

// Polynomial evaluation using Horners rule
#ifndef BOOST_MATH_TOOLS_POLY_EVAL_8_HPP
#define BOOST_MATH_TOOLS_POLY_EVAL_8_HPP

namespace boost{ namespace math{ namespace tools{ namespace detail{

template <class T, class V>
inline V evaluate_polynomial_c_imp(const T*, const V&, const mpl::int_<0>*) BOOST_MATH_NOEXCEPT(V)
{
   return static_cast<V>(0);
}

template <class T, class V>
inline V evaluate_polynomial_c_imp(const T* a, const V&, const mpl::int_<1>*) BOOST_MATH_NOEXCEPT(V)
{
   return static_cast<V>(a[0]);
}

template <class T, class V>
inline V evaluate_polynomial_c_imp(const T* a, const V& x, const mpl::int_<2>*) BOOST_MATH_NOEXCEPT(V)
{
   return static_cast<V>(a[1] * x + a[0]);
}

template <class T, class V>
inline V evaluate_polynomial_c_imp(const T* a, const V& x, const mpl::int_<3>*) BOOST_MATH_NOEXCEPT(V)
{
   return static_cast<V>((a[2] * x + a[1]) * x + a[0]);
}

template <class T, class V>
inline V evaluate_polynomial_c_imp(const T* a, const V& x, const mpl::int_<4>*) BOOST_MATH_NOEXCEPT(V)
{
   return static_cast<V>(((a[3] * x + a[2]) * x + a[1]) * x + a[0]);
}

template <class T, class V>
inline V evaluate_polynomial_c_imp(const T* a, const V& x, const mpl::int_<5>*) BOOST_MATH_NOEXCEPT(V)
{
   return static_cast<V>((((a[4] * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]);
}

template <class T, class V>
inline V evaluate_polynomial_c_imp(const T* a, const V& x, const mpl::int_<6>*) BOOST_MATH_NOEXCEPT(V)
{
   return static_cast<V>(((((a[5] * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]);
}

template <class T, class V>
inline V evaluate_polynomial_c_imp(const T* a, const V& x, const mpl::int_<7>*) BOOST_MATH_NOEXCEPT(V)
{
   return static_cast<V>((((((a[6] * x + a[5]) * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]);
}

template <class T, class V>
inline V evaluate_polynomial_c_imp(const T* a, const V& x, const mpl::int_<8>*) BOOST_MATH_NOEXCEPT(V)
{
   return static_cast<V>(((((((a[7] * x + a[6]) * x + a[5]) * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]);
}

}}}} // namespaces

#endif // include guard


code:
#if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
#ifndef BOOST_PHOENIX_OBJECT_DETAIL_CONSTRUCT_EVAL_HPP
#define BOOST_PHOENIX_OBJECT_DETAIL_CONSTRUCT_EVAL_HPP

#include <boost/phoenix/object/detail/cpp03/preprocessed/construct_eval.hpp>

#endif
#else

#if !BOOST_PHOENIX_IS_ITERATING

#ifndef BOOST_PHOENIX_OBJECT_DETAIL_CONSTRUCT_EVAL_HPP
#define BOOST_PHOENIX_OBJECT_DETAIL_CONSTRUCT_EVAL_HPP

#include <boost/preprocessor/repetition/enum_shifted_binary_params.hpp>

#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/construct_eval_" BOOST_PHOENIX_LIMIT_STR ".hpp")
#endif

/*==============================================================================
    Copyright (c) 2005-2010 Joel de Guzman
    Copyright (c) 2010 Thomas Heller

    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)
==============================================================================*/

#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif

#define BOOST_PHOENIX_ITERATION_PARAMS                                          \
    (3, (2, BOOST_PHOENIX_COMPOSITE_LIMIT,                                      \
    <boost/phoenix/object/detail/cpp03/construct_eval.hpp>))
#include BOOST_PHOENIX_ITERATE()

#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif

#endif

#else

        template <typename This, BOOST_PHOENIX_typename_A, typename Context>
        struct result<This(BOOST_PHOENIX_A, Context)>
            : detail::result_of::target<A0>
        {
        };

        template <BOOST_PHOENIX_typename_A, typename Context>
        typename detail::result_of::target<A0>::type
        operator()(
            A0 const&
          , BOOST_PP_ENUM_SHIFTED_BINARY_PARAMS(
                BOOST_PHOENIX_ITERATION
              , A
              , const& a
            )
          , Context const & ctx
        ) const
        {
#define EVAL_a(_,n,__) \
            BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) boost::phoenix::eval(a ## n, ctx)

            return
                typename detail::result_of::target<A0>::type(
                    BOOST_PP_REPEAT_FROM_TO(
                        1
                      , BOOST_PHOENIX_ITERATION
                      , EVAL_a, _
                    )
                );
#undef EVAL_a
        }

#endif

#endif // BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES


code:
/*
 *
 * Copyright (c) 1998-2002
 * John Maddock
 *
 * Use, modification and distribution are subject to 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)
 *
 */

 /*
  *   LOCATION:    see http://www.boost.org for most recent version.
  *   FILE         user.hpp
  *   VERSION      see <boost/version.hpp>
  *   DESCRIPTION: User settable options.
  */

// define if you want the regex library to use the C locale
// even on Win32:
// #define BOOST_REGEX_USE_C_LOCALE

// define this is you want the regex library to use the C++
// locale:
// #define BOOST_REGEX_USE_CPP_LOCALE

// define this if the runtime library is a dll, and you
// want BOOST_REGEX_DYN_LINK to set up dll exports/imports
// with __declspec(dllexport)/__declspec(dllimport.)
// #define BOOST_REGEX_HAS_DLL_RUNTIME

// define this if you want to dynamically link to regex,
// if the runtime library is also a dll (Probably Win32 specific,
// and has no effect unless BOOST_REGEX_HAS_DLL_RUNTIME is set):
// #define BOOST_REGEX_DYN_LINK

// define this if you don't want the lib to automatically
// select its link libraries:
// #define BOOST_REGEX_NO_LIB

// define this if templates with switch statements cause problems:
// #define BOOST_REGEX_NO_TEMPLATE_SWITCH_MERGE

// define this to disable Win32 support when available:
// #define BOOST_REGEX_NO_W32

// define this if bool is not a real type:
// #define BOOST_REGEX_NO_BOOL

// define this if no template instances are to be placed in
// the library rather than users object files:
// #define BOOST_REGEX_NO_EXTERNAL_TEMPLATES

// define this if the forward declarations in regex_fwd.hpp
// cause more problems than they are worth:
// #define BOOST_REGEX_NO_FWD

// define this if your compiler supports MS Windows structured
// exception handling.
// #define BOOST_REGEX_HAS_MS_STACK_GUARD

// define this if you want to use the recursive algorithm
// even if BOOST_REGEX_HAS_MS_STACK_GUARD is not defined.
// #define BOOST_REGEX_RECURSIVE

// define this if you want to use the non-recursive
// algorithm, even if the recursive version would be the default.
// #define BOOST_REGEX_NON_RECURSIVE

// define this if you want to set the size of the memory blocks
// used by the non-recursive algorithm.
// #define BOOST_REGEX_BLOCKSIZE 4096

// define this if you want to set the maximum number of memory blocks
// used by the non-recursive algorithm.
// #define BOOST_REGEX_MAX_BLOCKS 1024

// define this if you want to set the maximum number of memory blocks
// cached by the non-recursive algorithm: Normally this is 16, but can be
// higher if you have multiple threads all using boost.regex, or lower
// if you don't want boost.regex to cache memory.
// #define BOOST_REGEX_MAX_CACHE_BLOCKS 16

// define this if you want to be able to access extended capture
// information in your sub_match's (caution this will slow things
// down quite a bit).
// #define BOOST_REGEX_MATCH_EXTRA

// define this if you want to enable support for Unicode via ICU.
// #define BOOST_HAS_ICU

// define this if you want regex to use __cdecl calling convensions, even when __fastcall is available:
// #define BOOST_REGEX_NO_FASTCALL