code:
///////////////////////////////////////////////////////////////
//  Copyright 2015 John Maddock. 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_

#ifndef BOOST_MP_CPP_INT_IMPORT_EXPORT_HPP
#define BOOST_MP_CPP_INT_IMPORT_EXPORT_HPP

namespace boost {
   namespace multiprecision {

      namespace detail {

         template <class Backend, class Unsigned>
         void assign_bits(Backend& val, Unsigned bits, unsigned bit_location, unsigned chunk_bits, const mpl::false_& tag)
         {
            unsigned limb = bit_location / (sizeof(limb_type) * CHAR_BIT);
            unsigned shift = bit_location % (sizeof(limb_type) * CHAR_BIT);

            limb_type mask = chunk_bits >= sizeof(limb_type) * CHAR_BIT ? ~static_cast<limb_type>(0u) : (static_cast<limb_type>(1u) << chunk_bits) - 1;

            limb_type value = static_cast<limb_type>(bits & mask) << shift;
            if(value)
            {
               if(val.size() == limb)
               {
                  val.resize(limb + 1, limb + 1);
                  if(val.size() > limb)
                     val.limbs()[limb] = value;
               }
               else if(val.size() > limb)
                  val.limbs()[limb] |= value;
            }
            if(chunk_bits > sizeof(limb_type) * CHAR_BIT - shift)
            {
               shift = sizeof(limb_type) * CHAR_BIT - shift;
               chunk_bits -= shift;
               bit_location += shift;
               bits >>= shift;
               if(bits)
                  assign_bits(val, bits, bit_location, chunk_bits, tag);
            }
         }
         template <class Backend, class Unsigned>
         void assign_bits(Backend& val, Unsigned bits, unsigned bit_location, unsigned chunk_bits, const mpl::true_&)
         {
            typedef typename Backend::local_limb_type local_limb_type;
            //
            // Check for possible overflow, this may trigger an exception, or have no effect
            // depending on whether this is a checked integer or not:
            //
            if((bit_location >= sizeof(local_limb_type) * CHAR_BIT) && bits)
               val.resize(2, 2);
            else
            {
               local_limb_type mask = chunk_bits >= sizeof(local_limb_type) * CHAR_BIT ? ~static_cast<local_limb_type>(0u) : (static_cast<local_limb_type>(1u) << chunk_bits) - 1;
               local_limb_type value = (static_cast<local_limb_type>(bits) & mask) << bit_location;
               *val.limbs() |= value;
               //
               // Check for overflow bits:
               //
               bit_location = sizeof(local_limb_type) * CHAR_BIT - bit_location;
               bits >>= bit_location;
               if(bits)
                  val.resize(2, 2); // May throw!
            }
         }

         template <unsigned MinBits, unsigned MaxBits, cpp_integer_type SignType, cpp_int_check_type Checked, class Allocator>
         inline void resize_to_bit_size(cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>& newval, unsigned bits, const mpl::false_&)
         {
            unsigned limb_count = static_cast<unsigned>(bits / (sizeof(limb_type) * CHAR_BIT));
            if(bits % (sizeof(limb_type) * CHAR_BIT))
               ++limb_count;
            static const unsigned max_limbs = MaxBits ? MaxBits / (CHAR_BIT * sizeof(limb_type)) + ((MaxBits % (CHAR_BIT * sizeof(limb_type))) ? 1 : 0) : (std::numeric_limits<unsigned>::max)();
            if(limb_count > max_limbs)
               limb_count = max_limbs;
            newval.resize(limb_count, limb_count);
            std::memset(newval.limbs(), 0, newval.size() * sizeof(limb_type));
         }
         template <unsigned MinBits, unsigned MaxBits, cpp_integer_type SignType, cpp_int_check_type Checked, class Allocator>
         inline void resize_to_bit_size(cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>& newval, unsigned, const mpl::true_&)
         {
            *newval.limbs() = 0;
         }

         template <unsigned MinBits, unsigned MaxBits, cpp_integer_type SignType, cpp_int_check_type Checked, class Allocator, expression_template_option ExpressionTemplates, class Iterator>
         number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>&
            import_bits_generic(
               number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>& val, Iterator i, Iterator j, unsigned chunk_size = 0, bool msv_first = true)
         {
            typename number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>::backend_type newval;

            typedef typename std::iterator_traits<Iterator>::value_type       value_type;
            typedef typename boost::make_unsigned<value_type>::type           unsigned_value_type;
            typedef typename std::iterator_traits<Iterator>::difference_type  difference_type;
            typedef typename boost::make_unsigned<difference_type>::type      size_type;
            typedef typename cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>::trivial_tag tag_type;

            if(!chunk_size)
               chunk_size = std::numeric_limits<value_type>::digits;

            size_type limbs = std::distance(i, j);
            size_type bits = limbs * chunk_size;

            detail::resize_to_bit_size(newval, static_cast<unsigned>(bits), tag_type());

            difference_type bit_location = msv_first ? bits - chunk_size : 0;
            difference_type bit_location_change = msv_first ? -static_cast<difference_type>(chunk_size) : chunk_size;

            while(i != j)
            {
               detail::assign_bits(newval, static_cast<unsigned_value_type>(*i), static_cast<unsigned>(bit_location), chunk_size, tag_type());
               ++i;
               bit_location += bit_location_change;
            }

            newval.normalize();

            val.backend().swap(newval);
            return val;
         }

         template <unsigned MinBits, unsigned MaxBits, cpp_integer_type SignType, cpp_int_check_type Checked, class Allocator, expression_template_option ExpressionTemplates, class T>
         inline typename boost::disable_if_c<boost::multiprecision::backends::is_trivial_cpp_int<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator> >::value, number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>&>::type
            import_bits_fast(
               number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>& val, T* i, T* j, unsigned chunk_size = 0)
         {
            std::size_t byte_len = (j - i) * (chunk_size ? chunk_size / CHAR_BIT : sizeof(*i));
            std::size_t limb_len = byte_len / sizeof(limb_type);
            if(byte_len % sizeof(limb_type))
               ++limb_len;
            cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>& result = val.backend();
            result.resize(static_cast<unsigned>(limb_len), static_cast<unsigned>(limb_len));  // checked types may throw here if they're not large enough to hold the data!
            result.limbs()[result.size() - 1] = 0u;
            std::memcpy(result.limbs(), i, std::min(byte_len, result.size() * sizeof(limb_type)));
            result.normalize(); // In case data has leading zeros.
            return val;
         }
         template <unsigned MinBits, unsigned MaxBits, cpp_integer_type SignType, cpp_int_check_type Checked, class Allocator, expression_template_option ExpressionTemplates, class T>
         inline typename boost::enable_if_c<boost::multiprecision::backends::is_trivial_cpp_int<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator> >::value, number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>&>::type
            import_bits_fast(
               number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>& val, T* i, T* j, unsigned chunk_size = 0)
         {
            cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>& result = val.backend();
            std::size_t byte_len = (j - i) * (chunk_size ? chunk_size / CHAR_BIT : sizeof(*i));
            std::size_t limb_len = byte_len / sizeof(result.limbs()[0]);
            if(byte_len % sizeof(result.limbs()[0]))
               ++limb_len;
            result.limbs()[0] = 0u;
            result.resize(static_cast<unsigned>(limb_len), static_cast<unsigned>(limb_len));  // checked types may throw here if they're not large enough to hold the data!
            std::memcpy(result.limbs(), i, std::min(byte_len, result.size() * sizeof(result.limbs()[0])));
            result.normalize(); // In case data has leading zeros.
            return val;
         }
      }

      template <unsigned MinBits, unsigned MaxBits, cpp_integer_type SignType, cpp_int_check_type Checked, class Allocator, expression_template_option ExpressionTemplates, class Iterator>
      inline number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>&
         import_bits(
            number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>& val, Iterator i, Iterator j, unsigned chunk_size = 0, bool msv_first = true)
      {
         return detail::import_bits_generic(val, i, j, chunk_size, msv_first);
      }

      template <unsigned MinBits, unsigned MaxBits, cpp_integer_type SignType, cpp_int_check_type Checked, class Allocator, expression_template_option ExpressionTemplates, class T>
      inline number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>&
         import_bits(
            number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>& val, T* i, T* j, unsigned chunk_size = 0, bool msv_first = true)
      {
#ifdef BOOST_LITTLE_ENDIAN
         if(((chunk_size % CHAR_BIT) == 0) && !msv_first)
            return detail::import_bits_fast(val, i, j, chunk_size);
#endif
         return detail::import_bits_generic(val, i, j, chunk_size, msv_first);
      }

      namespace detail {

         template <class Backend>
         boost::uintmax_t extract_bits(const Backend& val, unsigned location, unsigned count, const mpl::false_& tag)
         {
            unsigned limb = location / (sizeof(limb_type) * CHAR_BIT);
            unsigned shift = location % (sizeof(limb_type) * CHAR_BIT);
            boost::uintmax_t result = 0;
            boost::uintmax_t mask = count == std::numeric_limits<boost::uintmax_t>::digits ? ~static_cast<boost::uintmax_t>(0) : (static_cast<boost::uintmax_t>(1u) << count) - 1;
            if(count > (sizeof(limb_type) * CHAR_BIT - shift))
            {
               result = extract_bits(val, location + sizeof(limb_type) * CHAR_BIT - shift, count - sizeof(limb_type) * CHAR_BIT + shift, tag);
               result <<= sizeof(limb_type) * CHAR_BIT - shift;
            }
            if(limb < val.size())
               result |= (val.limbs()[limb] >> shift) & mask;
            return result;
         }

         template <class Backend>
         inline boost::uintmax_t extract_bits(const Backend& val, unsigned location, unsigned count, const mpl::true_&)
         {
            boost::uintmax_t result = *val.limbs();
            boost::uintmax_t mask = count == std::numeric_limits<boost::uintmax_t>::digits ? ~static_cast<boost::uintmax_t>(0) : (static_cast<boost::uintmax_t>(1u) << count) - 1;
            return (result >> location) & mask;
         }

      }

      template <unsigned MinBits, unsigned MaxBits, cpp_integer_type SignType, cpp_int_check_type Checked, class Allocator, expression_template_option ExpressionTemplates, class OutputIterator>
      OutputIterator export_bits(
         const number<cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates>& val, OutputIterator out, unsigned chunk_size, bool msv_first = true)
      {
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4244)
#endif
         typedef typename cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>::trivial_tag tag_type;
         if(!val)
         {
            *out = 0;
            ++out;
            return out;
         }
         unsigned bitcount = boost::multiprecision::backends::eval_msb_imp(val.backend()) + 1;
         unsigned chunks = bitcount / chunk_size;
         if(bitcount % chunk_size)
            ++chunks;

         int bit_location = msv_first ? bitcount - chunk_size : 0;
         int bit_step = msv_first ? -static_cast<int>(chunk_size) : chunk_size;
         while(bit_location % bit_step) ++bit_location;

         do
         {
            *out = detail::extract_bits(val.backend(), bit_location, chunk_size, tag_type());
            ++out;
            bit_location += bit_step;
         } while((bit_location >= 0) && (bit_location < (int)bitcount));

         return out;
#ifdef _MSC_VER
#pragma warning(pop)
#endif
      }

   }
}

#endif // BOOST_MP_CPP_INT_IMPORT_EXPORT_HPP


code:
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga  2006-2014
//
// 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/intrusive for documentation.
//
/////////////////////////////////////////////////////////////////////////////

#ifndef BOOST_INTRUSIVE_DETAIL_UNCAST_HPP
#define BOOST_INTRUSIVE_DETAIL_UNCAST_HPP

#ifndef BOOST_CONFIG_HPP
#  include <boost/config.hpp>
#endif

#if defined(BOOST_HAS_PRAGMA_ONCE)
#  pragma once
#endif

#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/detail/mpl.hpp>

namespace boost {
namespace intrusive {
namespace detail {

template<class ConstNodePtr>
struct uncast_types
{
   typedef typename pointer_traits<ConstNodePtr>::element_type element_type;
   typedef typename remove_const<element_type>::type           non_const_type;
   typedef typename pointer_traits<ConstNodePtr>::
      template rebind_pointer<non_const_type>::type            non_const_pointer;
   typedef pointer_traits<non_const_pointer>                   non_const_traits;
};

template<class ConstNodePtr>
static typename uncast_types<ConstNodePtr>::non_const_pointer
   uncast(const ConstNodePtr & ptr)
{
   return uncast_types<ConstNodePtr>::non_const_traits::const_cast_from(ptr);
}

} //namespace detail {
} //namespace intrusive
} //namespace boost

#include <boost/intrusive/detail/config_end.hpp>

#endif //BOOST_INTRUSIVE_DETAIL_UTILITIES_HPP

license: mit


code:
#ifndef BOOST_MPL_AUX_YES_NO_HPP_INCLUDED
#define BOOST_MPL_AUX_YES_NO_HPP_INCLUDED

// Copyright Aleksey Gurtovoy 2000-2004
//
// 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/mpl for documentation.

// $Id$
// $Date$
// $Revision$

#include <boost/mpl/aux_/nttp_decl.hpp>
#include <boost/mpl/aux_/config/arrays.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>

namespace boost { namespace mpl { namespace aux {

typedef char (&no_tag)[1];
typedef char (&yes_tag)[2];

template< bool C_ > struct yes_no_tag
{
    typedef no_tag type;
};

template<> struct yes_no_tag<true>
{
    typedef yes_tag type;
};

template< BOOST_MPL_AUX_NTTP_DECL(long, n) > struct weighted_tag
{
#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
    typedef char (&type)[n];
#else
    char buf[n];
    typedef weighted_tag type;
#endif
};

#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
template<> struct weighted_tag<0>
{
    typedef char (&type)[1];
};
#endif

}}}

#endif // BOOST_MPL_AUX_YES_NO_HPP_INCLUDED


code:
/* boost random/xor_combine.hpp header file
 *
 * Copyright Jens Maurer 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 including documentation.
 *
 * $Id$
 *
 */

#ifndef BOOST_RANDOM_XOR_COMBINE_HPP
#define BOOST_RANDOM_XOR_COMBINE_HPP

#include <istream>
#include <iosfwd>
#include <cassert>
#include <algorithm> // for std::min and std::max
#include <boost/config.hpp>
#include <boost/limits.hpp>
#include <boost/cstdint.hpp>     // uint32_t
#include <boost/random/detail/config.hpp>
#include <boost/random/detail/seed.hpp>
#include <boost/random/detail/seed_impl.hpp>
#include <boost/random/detail/operators.hpp>

namespace boost {
namespace random {

/**
 * Instantiations of @c xor_combine_engine model a
 * \pseudo_random_number_generator.  To produce its output it
 * invokes each of the base generators, shifts their results
 * and xors them together.
 */
template<class URNG1, int s1, class URNG2, int s2>
class xor_combine_engine
{
public:
    typedef URNG1 base1_type;
    typedef URNG2 base2_type;
    typedef typename base1_type::result_type result_type;

    BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
    BOOST_STATIC_CONSTANT(int, shift1 = s1);
    BOOST_STATIC_CONSTANT(int, shift2 = s2);

    /**
     * Constructors a @c xor_combine_engine by default constructing
     * both base generators.
     */
    xor_combine_engine() : _rng1(), _rng2() { }

    /** Constructs a @c xor_combine by copying two base generators. */
    xor_combine_engine(const base1_type & rng1, const base2_type & rng2)
      : _rng1(rng1), _rng2(rng2) { }

    /**
     * Constructs a @c xor_combine_engine, seeding both base generators
     * with @c v.
     *
     * @xmlwarning
     * The exact algorithm used by this function may change in the future.
     * @endxmlwarning
     */
    BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(xor_combine_engine,
        result_type, v)
    { seed(v); }

    /**
     * Constructs a @c xor_combine_engine, seeding both base generators
     * with values produced by @c seq.
     */
    BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(xor_combine_engine,
        SeedSeq, seq)
    { seed(seq); }

    /**
     * Constructs a @c xor_combine_engine, seeding both base generators
     * with values from the iterator range [first, last) and changes
     * first to point to the element after the last one used.  If there
     * are not enough elements in the range to seed both generators,
     * throws @c std::invalid_argument.
     */
    template<class It> xor_combine_engine(It& first, It last)
      : _rng1(first, last), _rng2( /* advanced by other call */ first, last) { }

    /** Calls @c seed() for both base generators. */
    void seed() { _rng1.seed(); _rng2.seed(); }

    /** @c seeds both base generators with @c v. */
    BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(xor_combine_engine, result_type, v)
    { _rng1.seed(v); _rng2.seed(v); }

    /** @c seeds both base generators with values produced by @c seq. */
    BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(xor_combine_engine, SeedSeq, seq)
    { _rng1.seed(seq); _rng2.seed(seq); }

    /**
     * seeds both base generators with values from the iterator
     * range [first, last) and changes first to point to the element
     * after the last one used.  If there are not enough elements in
     * the range to seed both generators, throws @c std::invalid_argument.
     */
    template<class It> void seed(It& first, It last)
    {
        _rng1.seed(first, last);
        _rng2.seed(first, last);
    }

    /** Returns the first base generator. */
    const base1_type& base1() const { return _rng1; }

    /** Returns the second base generator. */
    const base2_type& base2() const { return _rng2; }

    /** Returns the next value of the generator. */
    result_type operator()()
    {
        return (_rng1() << s1) ^ (_rng2() << s2);
    }

    /** Fills a range with random values */
    template<class Iter>
    void generate(Iter first, Iter last)
    { detail::generate_from_int(*this, first, last); }

    /** Advances the state of the generator by @c z. */
    void discard(boost::uintmax_t z)
    {
        _rng1.discard(z);
        _rng2.discard(z);
    }

    /** Returns the smallest value that the generator can produce. */
    static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () { return (std::min)((URNG1::min)(), (URNG2::min)()); }
    /** Returns the largest value that the generator can produce. */
    static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () { return (std::max)((URNG1::min)(), (URNG2::max)()); }

    /**
     * Writes the textual representation of the generator to a @c std::ostream.
     */
    BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, xor_combine_engine, s)
    {
        os << s._rng1 << ' ' << s._rng2;
        return os;
    }

    /**
     * Reads the textual representation of the generator from a @c std::istream.
     */
    BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, xor_combine_engine, s)
    {
        is >> s._rng1 >> std::ws >> s._rng2;
        return is;
    }

    /** Returns true if the two generators will produce identical sequences. */
    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(xor_combine_engine, x, y)
    { return x._rng1 == y._rng1 && x._rng2 == y._rng2; }

    /** Returns true if the two generators will produce different sequences. */
    BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(xor_combine_engine)

private:
    base1_type _rng1;
    base2_type _rng2;
};

#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
//  A definition is required even for integral static constants
template<class URNG1, int s1, class URNG2, int s2>
const bool xor_combine_engine<URNG1, s1, URNG2, s2>::has_fixed_range;
template<class URNG1, int s1, class URNG2, int s2>
const int xor_combine_engine<URNG1, s1, URNG2, s2>::shift1;
template<class URNG1, int s1, class URNG2, int s2>
const int xor_combine_engine<URNG1, s1, URNG2, s2>::shift2;
#endif

/// \cond show_private

/** Provided for backwards compatibility. */
template<class URNG1, int s1, class URNG2, int s2,
    typename URNG1::result_type v = 0>
class xor_combine : public xor_combine_engine<URNG1, s1, URNG2, s2>
{
    typedef xor_combine_engine<URNG1, s1, URNG2, s2> base_type;
public:
    typedef typename base_type::result_type result_type;
    xor_combine() {}
    xor_combine(result_type val) : base_type(val) {}
    template<class It>
    xor_combine(It& first, It last) : base_type(first, last) {}
    xor_combine(const URNG1 & rng1, const URNG2 & rng2)
      : base_type(rng1, rng2) { }

    result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (std::min)((this->base1().min)(), (this->base2().min)()); }
    result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return (std::max)((this->base1().min)(), (this->base2().max)()); }
};

/// \endcond

} // namespace random
} // namespace boost

#endif // BOOST_RANDOM_XOR_COMBINE_HPP


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_RAT_11_HPP
#define BOOST_MATH_TOOLS_POLY_RAT_11_HPP

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

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

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

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<2>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     return static_cast<V>((a[1] * x + a[0]) / (b[1] * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>((a[0] * z + a[1]) / (b[0] * z + b[1]));
   }
}

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<3>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     return static_cast<V>(((a[2] * x + a[1]) * x + a[0]) / ((b[2] * x + b[1]) * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>(((a[0] * z + a[1]) * z + a[2]) / ((b[0] * z + b[1]) * z + b[2]));
   }
}

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<4>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     return static_cast<V>((((a[3] * x + a[2]) * x + a[1]) * x + a[0]) / (((b[3] * x + b[2]) * x + b[1]) * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>((((a[0] * z + a[1]) * z + a[2]) * z + a[3]) / (((b[0] * z + b[1]) * z + b[2]) * z + b[3]));
   }
}

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<5>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     return static_cast<V>(((((a[4] * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]) / ((((b[4] * x + b[3]) * x + b[2]) * x + b[1]) * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>(((((a[0] * z + a[1]) * z + a[2]) * z + a[3]) * z + a[4]) / ((((b[0] * z + b[1]) * z + b[2]) * z + b[3]) * z + b[4]));
   }
}

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<6>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     return static_cast<V>((((((a[5] * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]) / (((((b[5] * x + b[4]) * x + b[3]) * x + b[2]) * x + b[1]) * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>((((((a[0] * z + a[1]) * z + a[2]) * z + a[3]) * z + a[4]) * z + a[5]) / (((((b[0] * z + b[1]) * z + b[2]) * z + b[3]) * z + b[4]) * z + b[5]));
   }
}

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<7>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     return static_cast<V>(((((((a[6] * x + a[5]) * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]) / ((((((b[6] * x + b[5]) * x + b[4]) * x + b[3]) * x + b[2]) * x + b[1]) * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>(((((((a[0] * z + a[1]) * z + a[2]) * z + a[3]) * z + a[4]) * z + a[5]) * z + a[6]) / ((((((b[0] * z + b[1]) * z + b[2]) * z + b[3]) * z + b[4]) * z + b[5]) * z + b[6]));
   }
}

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<8>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     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]) / (((((((b[7] * x + b[6]) * x + b[5]) * x + b[4]) * x + b[3]) * x + b[2]) * x + b[1]) * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>((((((((a[0] * z + a[1]) * z + a[2]) * z + a[3]) * z + a[4]) * z + a[5]) * z + a[6]) * z + a[7]) / (((((((b[0] * z + b[1]) * z + b[2]) * z + b[3]) * z + b[4]) * z + b[5]) * z + b[6]) * z + b[7]));
   }
}

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<9>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     return static_cast<V>(((((((((a[8] * x + a[7]) * x + a[6]) * x + a[5]) * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]) / ((((((((b[8] * x + b[7]) * x + b[6]) * x + b[5]) * x + b[4]) * x + b[3]) * x + b[2]) * x + b[1]) * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>(((((((((a[0] * z + a[1]) * z + a[2]) * z + a[3]) * z + a[4]) * z + a[5]) * z + a[6]) * z + a[7]) * z + a[8]) / ((((((((b[0] * z + b[1]) * z + b[2]) * z + b[3]) * z + b[4]) * z + b[5]) * z + b[6]) * z + b[7]) * z + b[8]));
   }
}

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<10>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     return static_cast<V>((((((((((a[9] * x + a[8]) * x + a[7]) * x + a[6]) * x + a[5]) * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]) / (((((((((b[9] * x + b[8]) * x + b[7]) * x + b[6]) * x + b[5]) * x + b[4]) * x + b[3]) * x + b[2]) * x + b[1]) * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>((((((((((a[0] * z + a[1]) * z + a[2]) * z + a[3]) * z + a[4]) * z + a[5]) * z + a[6]) * z + a[7]) * z + a[8]) * z + a[9]) / (((((((((b[0] * z + b[1]) * z + b[2]) * z + b[3]) * z + b[4]) * z + b[5]) * z + b[6]) * z + b[7]) * z + b[8]) * z + b[9]));
   }
}

template <class T, class U, class V>
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<11>*) BOOST_MATH_NOEXCEPT(V)
{
   if(x <= 1)
     return static_cast<V>(((((((((((a[10] * x + a[9]) * x + a[8]) * x + a[7]) * x + a[6]) * x + a[5]) * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0]) / ((((((((((b[10] * x + b[9]) * x + b[8]) * x + b[7]) * x + b[6]) * x + b[5]) * x + b[4]) * x + b[3]) * x + b[2]) * x + b[1]) * x + b[0]));
   else
   {
      V z = 1 / x;
      return static_cast<V>(((((((((((a[0] * z + a[1]) * z + a[2]) * z + a[3]) * z + a[4]) * z + a[5]) * z + a[6]) * z + a[7]) * z + a[8]) * z + a[9]) * z + a[10]) / ((((((((((b[0] * z + b[1]) * z + b[2]) * z + b[3]) * z + b[4]) * z + b[5]) * z + b[6]) * z + b[7]) * z + b[8]) * z + b[9]) * z + b[10]));
   }
}

}}}} // namespaces

#endif // include guard


code:
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2014-2015. 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/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ITERATOR_TO_RAW_POINTER_HPP
#define BOOST_CONTAINER_DETAIL_ITERATOR_TO_RAW_POINTER_HPP

#ifndef BOOST_CONFIG_HPP
#  include <boost/config.hpp>
#endif

#if defined(BOOST_HAS_PRAGMA_ONCE)
#  pragma once
#endif

#include <boost/container/detail/iterator.hpp>
#include <boost/container/detail/to_raw_pointer.hpp>
#include <boost/intrusive/pointer_traits.hpp>

namespace boost {
namespace container {
namespace container_detail {

template <class T>
inline T* iterator_to_pointer(T* i)
{  return i; }

template <class Iterator>
inline typename boost::container::iterator_traits<Iterator>::pointer
   iterator_to_pointer(const Iterator &i)
{  return i.operator->();  }

template <class Iterator>
struct iterator_to_element_ptr
{
   typedef typename boost::container::iterator_traits<Iterator>::pointer      pointer;
   typedef typename boost::intrusive::pointer_traits<pointer>::element_type   element_type;
   typedef element_type* type;
};

template <class Iterator>
inline typename iterator_to_element_ptr<Iterator>::type
   iterator_to_raw_pointer(const Iterator &i)
{
   return ::boost::intrusive::detail::to_raw_pointer
      (  ::boost::container::container_detail::iterator_to_pointer(i)   );
}

}  //namespace container_detail {
}  //namespace container {
}  //namespace boost {

#endif   //#ifndef BOOST_CONTAINER_DETAIL_ITERATOR_TO_RAW_POINTER_HPP


code:
//---------------------------------------------------------------------------//
// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
//
// 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://boostorg.github.com/compute for more information.
//---------------------------------------------------------------------------//

#ifndef BOOST_COMPUTE_ALGORITHM_SORT_HPP
#define BOOST_COMPUTE_ALGORITHM_SORT_HPP

#include <iterator>

#include <boost/utility/enable_if.hpp>

#include <boost/compute/system.hpp>
#include <boost/compute/command_queue.hpp>
#include <boost/compute/algorithm/detail/merge_sort_on_cpu.hpp>
#include <boost/compute/algorithm/detail/merge_sort_on_gpu.hpp>
#include <boost/compute/algorithm/detail/radix_sort.hpp>
#include <boost/compute/algorithm/detail/insertion_sort.hpp>
#include <boost/compute/algorithm/reverse.hpp>
#include <boost/compute/container/mapped_view.hpp>
#include <boost/compute/detail/iterator_range_size.hpp>
#include <boost/compute/iterator/buffer_iterator.hpp>
#include <boost/compute/type_traits/is_device_iterator.hpp>

namespace boost {
namespace compute {
namespace detail {

template<class T>
inline void dispatch_gpu_sort(buffer_iterator<T> first,
                              buffer_iterator<T> last,
                              less<T>,
                              command_queue &queue,
                              typename boost::enable_if_c<
                                  is_radix_sortable<T>::value
                              >::type* = 0)
{
    size_t count = detail::iterator_range_size(first, last);

    if(count < 2){
        // nothing to do
        return;
    }
    else if(count <= 32){
        ::boost::compute::detail::serial_insertion_sort(first, last, queue);
    }
    else {
        ::boost::compute::detail::radix_sort(first, last, queue);
    }
}

template<class T>
inline void dispatch_gpu_sort(buffer_iterator<T> first,
                              buffer_iterator<T> last,
                              greater<T> compare,
                              command_queue &queue,
                              typename boost::enable_if_c<
                                  is_radix_sortable<T>::value
                              >::type* = 0)
{
    size_t count = detail::iterator_range_size(first, last);

    if(count < 2){
        // nothing to do
        return;
    }
    else if(count <= 32){
        ::boost::compute::detail::serial_insertion_sort(
            first, last, compare, queue
        );
    }
    else {
        // radix sorts in descending order
        ::boost::compute::detail::radix_sort(first, last, false, queue);
    }
}

template<class Iterator, class Compare>
inline void dispatch_gpu_sort(Iterator first,
                              Iterator last,
                              Compare compare,
                              command_queue &queue)
{
    size_t count = detail::iterator_range_size(first, last);

    if(count < 2){
        // nothing to do
        return;
    }
    else if(count <= 32){
        ::boost::compute::detail::serial_insertion_sort(
            first, last, compare, queue
        );
    }
    else {
        ::boost::compute::detail::merge_sort_on_gpu(
            first, last, compare, queue
        );
    }
}

// sort() for device iterators
template<class Iterator, class Compare>
inline void dispatch_sort(Iterator first,
                          Iterator last,
                          Compare compare,
                          command_queue &queue,
                          typename boost::enable_if<
                              is_device_iterator<Iterator>
                          >::type* = 0)
{
    if(queue.get_device().type() & device::gpu) {
        dispatch_gpu_sort(first, last, compare, queue);
        return;
    }
    ::boost::compute::detail::merge_sort_on_cpu(first, last, compare, queue);
}

// sort() for host iterators
template<class Iterator, class Compare>
inline void dispatch_sort(Iterator first,
                          Iterator last,
                          Compare compare,
                          command_queue &queue,
                          typename boost::disable_if<
                              is_device_iterator<Iterator>
                          >::type* = 0)
{
    typedef typename std::iterator_traits<Iterator>::value_type T;

    size_t size = static_cast<size_t>(std::distance(first, last));

    // create mapped buffer
    mapped_view<T> view(
        boost::addressof(*first), size, queue.get_context()
    );

    // sort mapped buffer
    dispatch_sort(view.begin(), view.end(), compare, queue);

    // return results to host
    view.map(queue);
}

} // end detail namespace

/// Sorts the values in the range [\p first, \p last) according to
/// \p compare.
///
/// \param first first element in the range to sort
/// \param last last element in the range to sort
/// \param compare comparison function (by default \c less)
/// \param queue command queue to perform the operation
///
/// For example, to sort a vector on the device:
/// \code
/// // create vector on the device with data
/// float data[] = { 2.f, 4.f, 1.f, 3.f };
/// boost::compute::vector<float> vec(data, data + 4, queue);
///
/// // sort the vector on the device
/// boost::compute::sort(vec.begin(), vec.end(), queue);
/// \endcode
///
/// The sort() algorithm can also be directly used with host iterators. This
/// example will automatically transfer the data to the device, sort it, and
/// then transfer the data back to the host:
/// \code
/// std::vector<int> data = { 9, 3, 2, 5, 1, 4, 6, 7 };
///
/// boost::compute::sort(data.begin(), data.end(), queue);
/// \endcode
///
/// \see is_sorted()
template<class Iterator, class Compare>
inline void sort(Iterator first,
                 Iterator last,
                 Compare compare,
                 command_queue &queue = system::default_queue())
{
    ::boost::compute::detail::dispatch_sort(first, last, compare, queue);
}

/// \overload
template<class Iterator>
inline void sort(Iterator first,
                 Iterator last,
                 command_queue &queue = system::default_queue())
{
    typedef typename std::iterator_traits<Iterator>::value_type value_type;

    ::boost::compute::sort(
        first, last, ::boost::compute::less<value_type>(), queue
    );
}

} // end compute namespace
} // end boost namespace

#endif // BOOST_COMPUTE_ALGORITHM_SORT_HPP


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


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 second order Horners rule
#ifndef BOOST_MATH_TOOLS_POLY_EVAL_10_HPP
#define BOOST_MATH_TOOLS_POLY_EVAL_10_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)
{
   V x2 = x * x;
   return static_cast<V>((a[4] * x2 + a[2]) * x2 + a[0] + (a[3] * x2 + a[1]) * x);
}

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)
{
   V x2 = x * x;
   return static_cast<V>(((a[5] * x2 + a[3]) * x2 + a[1]) * x + (a[4] * x2 + a[2]) * x2 + 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)
{
   V x2 = x * x;
   return static_cast<V>(((a[6] * x2 + a[4]) * x2 + a[2]) * x2 + a[0] + ((a[5] * x2 + a[3]) * x2 + a[1]) * x);
}

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)
{
   V x2 = x * x;
   return static_cast<V>((((a[7] * x2 + a[5]) * x2 + a[3]) * x2 + a[1]) * x + ((a[6] * x2 + a[4]) * x2 + a[2]) * x2 + a[0]);
}

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

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

}}}} // namespaces

#endif // include guard


code:
// Boost.Units - A C++ library for zero-overhead dimensional analysis and
// unit/quantity manipulation and conversion
//
// Copyright (C) 2003-2008 Matthias Christian Schabel
// Copyright (C) 2008 Steven Watanabe
//
// 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_UNITS_MOMENTUM_DERIVED_DIMENSION_HPP
#define BOOST_UNITS_MOMENTUM_DERIVED_DIMENSION_HPP

#include <boost/units/derived_dimension.hpp>
#include <boost/units/physical_dimensions/length.hpp>
#include <boost/units/physical_dimensions/mass.hpp>
#include <boost/units/physical_dimensions/time.hpp>

namespace boost {

namespace units {

/// derived dimension for linear momentum : L M T^-1
typedef derived_dimension<length_base_dimension,1,
                          mass_base_dimension,1,
                          time_base_dimension,-1>::type momentum_dimension;

} // namespace units

} // namespace boost

#endif // BOOST_UNITS_MOMENTUM_DERIVED_DIMENSION_HPP