code:
/*=============================================================================
    Copyright (c) 2001-2011 Joel de Guzman

    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)

    This is an auto-generated file. Do not edit!
==============================================================================*/
namespace boost { namespace fusion
{
    struct void_;
    namespace result_of
    {
        template <
            typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_
          , typename Extra = void_
        >
        struct make_set;
        template <>
        struct make_set<>
        {
            typedef set<> type;
        };
    }

# if defined(BOOST_CLANG)
    BOOST_CXX14_CONSTEXPR
# else
    BOOST_CONSTEXPR
# endif
    BOOST_FUSION_GPU_ENABLED
    inline set<>
    make_set()
    {
        return set<>();
    }
    namespace result_of
    {
        template <typename T0>
        struct make_set< T0 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type> type;
        };
    }
    template <typename T0>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type>
    make_set(T0 const& arg0)
    {
        return set<typename detail::as_fusion_element<T0>::type>(
            arg0);
    }
    namespace result_of
    {
        template <typename T0 , typename T1>
        struct make_set< T0 , T1 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type> type;
        };
    }
    template <typename T0 , typename T1>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>
    make_set(T0 const& arg0 , T1 const& arg1)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type>(
            arg0 , arg1);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2>
        struct make_set< T0 , T1 , T2 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type>(
            arg0 , arg1 , arg2);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3>
        struct make_set< T0 , T1 , T2 , T3 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type>(
            arg0 , arg1 , arg2 , arg3);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
        struct make_set< T0 , T1 , T2 , T3 , T4 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10 , T11 const& arg11)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10 , T11 const& arg11 , T12 const& arg12)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 , arg12);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , void_ , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10 , T11 const& arg11 , T12 const& arg12 , T13 const& arg13)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 , arg12 , arg13);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , void_ , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10 , T11 const& arg11 , T12 const& arg12 , T13 const& arg13 , T14 const& arg14)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 , arg12 , arg13 , arg14);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , void_ , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10 , T11 const& arg11 , T12 const& arg12 , T13 const& arg13 , T14 const& arg14 , T15 const& arg15)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 , arg12 , arg13 , arg14 , arg15);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , void_ , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10 , T11 const& arg11 , T12 const& arg12 , T13 const& arg13 , T14 const& arg14 , T15 const& arg15 , T16 const& arg16)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 , arg12 , arg13 , arg14 , arg15 , arg16);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , void_ , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10 , T11 const& arg11 , T12 const& arg12 , T13 const& arg13 , T14 const& arg14 , T15 const& arg15 , T16 const& arg16 , T17 const& arg17)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 , arg12 , arg13 , arg14 , arg15 , arg16 , arg17);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , void_ , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10 , T11 const& arg11 , T12 const& arg12 , T13 const& arg13 , T14 const& arg14 , T15 const& arg15 , T16 const& arg16 , T17 const& arg17 , T18 const& arg18)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 , arg12 , arg13 , arg14 , arg15 , arg16 , arg17 , arg18);
    }
    namespace result_of
    {
        template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
        struct make_set< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , void_ >
        {
            typedef set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type> type;
        };
    }
    template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>
    make_set(T0 const& arg0 , T1 const& arg1 , T2 const& arg2 , T3 const& arg3 , T4 const& arg4 , T5 const& arg5 , T6 const& arg6 , T7 const& arg7 , T8 const& arg8 , T9 const& arg9 , T10 const& arg10 , T11 const& arg11 , T12 const& arg12 , T13 const& arg13 , T14 const& arg14 , T15 const& arg15 , T16 const& arg16 , T17 const& arg17 , T18 const& arg18 , T19 const& arg19)
    {
        return set<typename detail::as_fusion_element<T0>::type , typename detail::as_fusion_element<T1>::type , typename detail::as_fusion_element<T2>::type , typename detail::as_fusion_element<T3>::type , typename detail::as_fusion_element<T4>::type , typename detail::as_fusion_element<T5>::type , typename detail::as_fusion_element<T6>::type , typename detail::as_fusion_element<T7>::type , typename detail::as_fusion_element<T8>::type , typename detail::as_fusion_element<T9>::type , typename detail::as_fusion_element<T10>::type , typename detail::as_fusion_element<T11>::type , typename detail::as_fusion_element<T12>::type , typename detail::as_fusion_element<T13>::type , typename detail::as_fusion_element<T14>::type , typename detail::as_fusion_element<T15>::type , typename detail::as_fusion_element<T16>::type , typename detail::as_fusion_element<T17>::type , typename detail::as_fusion_element<T18>::type , typename detail::as_fusion_element<T19>::type>(
            arg0 , arg1 , arg2 , arg3 , arg4 , arg5 , arg6 , arg7 , arg8 , arg9 , arg10 , arg11 , arg12 , arg13 , arg14 , arg15 , arg16 , arg17 , arg18 , arg19);
    }
}}


code:
//---------------------------------------------------------------------------//
// Copyright (c) 2014 Mageswaran.D <mageswaran1989@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.
//---------------------------------------------------------------------------//

#include <boost/compute/system.hpp>
#include <boost/compute/context.hpp>
#include <boost/compute/command_queue.hpp>
#include <boost/compute/algorithm/any_of.hpp>
#include <boost/compute/container/vector.hpp>
#include <boost/compute/utility/program_cache.hpp>

namespace boost {
namespace compute {

namespace detail {

const char lexicographical_compare_source[] =
"__kernel void lexicographical_compare(const uint size1,\n"
"                                      const uint size2,\n"
"                                      __global const T1 *range1,\n"
"                                      __global const T2 *range2,\n"
"                                      __global bool *result_buf)\n"
"{\n"
"   const uint i = get_global_id(0);\n"
"   if((i != size1) && (i != size2)){\n"
        //Individual elements are compared and results are stored in parallel.
        //0 is true
"       if(range1[i] < range2[i])\n"
"           result_buf[i] = 0;\n"
"       else\n"
"           result_buf[i] = 1;\n"
"   }\n"
"   else\n"
"       result_buf[i] = !((i == size1) && (i != size2));\n"
"}\n";

template<class InputIterator1, class InputIterator2>
inline bool dispatch_lexicographical_compare(InputIterator1 first1,
                                     InputIterator1 last1,
                                     InputIterator2 first2,
                                     InputIterator2 last2,
                                     command_queue &queue)
{
    const boost::compute::context &context = queue.get_context();

    boost::shared_ptr<program_cache> cache =
        program_cache::get_global_cache(context);

    size_t iterator_size1 = iterator_range_size(first1, last1);
    size_t iterator_size2 = iterator_range_size(first2, last2);
    size_t max_size = (std::max)(iterator_size1, iterator_size2);

    if(max_size == 0){
        return false;
    }

    boost::compute::vector<bool> result_vector(max_size, context);

    typedef typename std::iterator_traits<InputIterator1>::value_type value_type1;
    typedef typename std::iterator_traits<InputIterator2>::value_type value_type2;

    // load (or create) lexicographical compare program
    std::string cache_key =
            std::string("__boost_lexicographical_compare")
            + type_name<value_type1>() + type_name<value_type2>();

    std::stringstream options;
    options << " -DT1=" << type_name<value_type1>();
    options << " -DT2=" << type_name<value_type2>();

    program lexicographical_compare_program = cache->get_or_build(
        cache_key, options.str(), lexicographical_compare_source, context
    );

    kernel lexicographical_compare_kernel(lexicographical_compare_program,
                                          "lexicographical_compare");

    lexicographical_compare_kernel.set_arg<uint_>(0, iterator_size1);
    lexicographical_compare_kernel.set_arg<uint_>(1, iterator_size2);
    lexicographical_compare_kernel.set_arg(2, first1.get_buffer());
    lexicographical_compare_kernel.set_arg(3, first2.get_buffer());
    lexicographical_compare_kernel.set_arg(4, result_vector.get_buffer());

    queue.enqueue_1d_range_kernel(lexicographical_compare_kernel,
                                  0,
                                  max_size,
                                  0);

    return boost::compute::any_of(result_vector.begin(),
                                  result_vector.end(),
                                  _1 == 0,
                                  queue);
}

} // end detail namespace

/// Checks if the first range [first1, last1) is lexicographically
/// less than the second range [first2, last2).
template<class InputIterator1, class InputIterator2>
inline bool lexicographical_compare(InputIterator1 first1,
                                    InputIterator1 last1,
                                    InputIterator2 first2,
                                    InputIterator2 last2,
                                    command_queue &queue = system::default_queue())
{
    return detail::dispatch_lexicographical_compare(first1, last1, first2, last2, queue);
}

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

license: mit


code:
module iso_c_utilities

  use, intrinsic :: iso_c_binding, only: c_ptr, c_char, c_f_pointer, c_associated
  implicit none

  public :: c_to_f_string, c_f_dyn_string

  private

  character(c_char), dimension(1), save, target :: dummy_string = "?"

  interface        ! strlen is a standard C function from <string.h>
     ! int strlen(char *string)
     function strlen (string) result (len) bind (c, name="strlen")
       use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t
       implicit none
       type(c_ptr), value :: string
       integer(kind=c_size_t) :: len
     end function strlen

     ! void free(void * p)
     subroutine c_free (p) bind (c, name="free")
       use, intrinsic :: iso_c_binding, only: c_ptr
       implicit none
       type(c_ptr), value :: p
     end subroutine c_free
  end interface

contains

  !
  ! Cast C string pointer to Fortran string pointer
  !
  ! Warning! - C data must outlive result scope
  !
  function c_to_f_string (c_str) result (f_str)
    use, intrinsic :: iso_c_binding, only: c_ptr, c_f_pointer, c_char
    implicit none
    type(c_ptr), intent(in) :: c_str
    character(kind=c_char, len=:), pointer :: f_str
    character(kind=c_char), pointer :: arr(:)
    interface        ! strlen is a standard C function from <string.h>
       ! int strlen(char *string)
       function strlen (string) result (len) bind (c, name="strlen")
         use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t
         implicit none
         type(c_ptr), value :: string
         integer(kind=c_size_t) :: len
       end function strlen
    end interface
    call c_f_pointer (c_str, arr, [strlen (c_str)])
    call get_scalar_pointer (size (arr), arr, f_str)
  end function c_to_f_string

  subroutine get_scalar_pointer (scalar_len, scalar, fptr)
    ! Convert a null-terminated C string into a Fortran character pointer
    use, intrinsic :: iso_c_binding, only: c_char
    integer, intent(in) :: scalar_len
    character(kind=c_char, len=scalar_len), intent(in), target :: scalar(1)
    character(kind=c_char, len=:), pointer :: fptr
    fptr => scalar(1)
  end subroutine get_scalar_pointer

  function c_f_dyn_string (cptr) result (fstr)
    ! Convert a null-terminated malloc'ed C string into a Fortran character array
    type(c_ptr), intent(in) :: cptr ! The C address
    character(kind=c_char), allocatable :: fstr(:)
    character(kind=c_char), pointer :: fptr(:)
    interface        ! strlen is a standard C function from <string.h>
       ! void free(void * p)
       subroutine c_free (p) bind (c, name="free")
         use, intrinsic :: iso_c_binding, only: c_ptr
         implicit none
         type(c_ptr), value :: p
       end subroutine c_free
    end interface
    if (c_associated (cptr)) then
       call c_f_pointer (fptr=fptr, cptr=cptr, shape=[strlen(cptr)])
    else
       ! To avoid segfaults, associate FPTR with a dummy target:
       fptr => dummy_string
    end if
    fstr = fptr
    call c_free (cptr)
  end function c_f_dyn_string

end module


code:
void golay24_table_(int cw[])
{
  // Compute arnd return the table of 4096 codewords for the Golay (24,12) code.

  // Array y contains the twelve rows (columns) of the parity-check matrix
  int y[12] = { 0x7ff, 0xee2, 0xdc5, 0xb8b, 0xf16, 0xe2d,
		0xc5b, 0x8b7, 0x96e, 0xadc, 0xdb8, 0xb71 };

  int c[2];          /* Codeword composed of 12-bit info and 12-bit parity */

  int i,j,k;
  int aux;
  int weight(int vector);

  for(k=0; k<4096; k++) {
    c[0] = k;
    c[1] = 0;
    for (i=0; i<12; i++) {
      aux = 0;
      for (j=0; j<12; j++) {
	aux = aux ^ ((c[0] & y[i]) >> j & 1);
      }
      c[1] = (c[1] << 1) ^ aux;
    }
    cw[k]=4096*c[0] + c[1];
  }
}


code:
#ifndef REVISION_UTILS_HPP__
#define REVISION_UTILS_HPP__

#include <QString>

QString revision (QString const& svn_rev_string = QString {});
QString version (bool include_patch = true);
QString program_title (QString const& revision = QString {});

#endif


code:
/*=============================================================================
    Copyright (c) 2001-2011 Joel de Guzman

    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)

    This is an auto-generated file. Do not edit!
==============================================================================*/
namespace boost { namespace fusion
{
    struct void_;
    template<
        typename T0 = void_ , typename T1 = void_ , typename T2 = void_ , typename T3 = void_ , typename T4 = void_ , typename T5 = void_ , typename T6 = void_ , typename T7 = void_ , typename T8 = void_ , typename T9 = void_ , typename T10 = void_ , typename T11 = void_ , typename T12 = void_ , typename T13 = void_ , typename T14 = void_ , typename T15 = void_ , typename T16 = void_ , typename T17 = void_ , typename T18 = void_ , typename T19 = void_ , typename T20 = void_ , typename T21 = void_ , typename T22 = void_ , typename T23 = void_ , typename T24 = void_ , typename T25 = void_ , typename T26 = void_ , typename T27 = void_ , typename T28 = void_ , typename T29 = void_>
    struct deque;
}}


code:
# gnuplot script for "Percent copy" figure
# run: gnuplot fig_wer2.gnuplot
# then: pdflatex fig_wer2.tex
#
set term epslatex standalone size 6in,6*2/3in
set output "fig_wer2.tex"
set xlabel "SNR in 2500 Hz Bandwidth (dB)"
set ylabel "Percent Copy"
set style func linespoints
set key off
set tics in
set mxtics 2
set mytics 5
set grid
plot [-27:-22] [0:110] \
     "ftdata-100000.dat" using 1:(100*$3) with linespoints lt 1 lw 2 pt 7, \
     "ftdata-10000.dat" using 1:(100*$3) with linespoints lt 1 lw 2 pt 7, \
     "ftdata-1000.dat" using 1:(100*$3) with linespoints lt 1 lw 2 pt 7, \
     "ftdata-100.dat" using 1:(100*$3) with linespoints lt 1 lw 2 pt 7, \
     "ftdata-10.dat" using 1:(100*$2) with linespoints lt 1 lw 2 pt 7, \
     "kvasd-15.dat" using 1:(100*$2) with linespoints lt 4 pt 6, \
     "bmdata.dat" using 1:(100*$2) with linespoints lt 2 lw 2 pt 2, \
     "wer2.lab" with labels


code:
// Copyright Aleksey Gurtovoy 2000-2004
// Copyright David Abrahams 2003-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)
//

// Preprocessed version of "boost/mpl/map/map30.hpp" header
// -- DO NOT modify by hand!

namespace boost { namespace mpl {

template<>
struct m_at_impl<20>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item20 type;
    };
};

template<>
struct m_item_impl<21>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item20;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20
    >
struct map21
    : m_item<
          21
        , typename P20::first
        , typename P20::second
        , map20< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19 >
        >
{
    typedef map21 type;
};

template<>
struct m_at_impl<21>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item21 type;
    };
};

template<>
struct m_item_impl<22>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item21;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20, typename P21
    >
struct map22
    : m_item<
          22
        , typename P21::first
        , typename P21::second
        , map21< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20 >
        >
{
    typedef map22 type;
};

template<>
struct m_at_impl<22>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item22 type;
    };
};

template<>
struct m_item_impl<23>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item22;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20, typename P21, typename P22
    >
struct map23
    : m_item<
          23
        , typename P22::first
        , typename P22::second
        , map22< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21 >
        >
{
    typedef map23 type;
};

template<>
struct m_at_impl<23>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item23 type;
    };
};

template<>
struct m_item_impl<24>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item23;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20, typename P21, typename P22, typename P23
    >
struct map24
    : m_item<
          24
        , typename P23::first
        , typename P23::second
        , map23< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22 >
        >
{
    typedef map24 type;
};

template<>
struct m_at_impl<24>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item24 type;
    };
};

template<>
struct m_item_impl<25>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item24;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20, typename P21, typename P22, typename P23, typename P24
    >
struct map25
    : m_item<
          25
        , typename P24::first
        , typename P24::second
        , map24< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23 >
        >
{
    typedef map25 type;
};

template<>
struct m_at_impl<25>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item25 type;
    };
};

template<>
struct m_item_impl<26>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item25;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20, typename P21, typename P22, typename P23, typename P24
    , typename P25
    >
struct map26
    : m_item<
          26
        , typename P25::first
        , typename P25::second
        , map25< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24 >
        >
{
    typedef map26 type;
};

template<>
struct m_at_impl<26>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item26 type;
    };
};

template<>
struct m_item_impl<27>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item26;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20, typename P21, typename P22, typename P23, typename P24
    , typename P25, typename P26
    >
struct map27
    : m_item<
          27
        , typename P26::first
        , typename P26::second
        , map26< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 >
        >
{
    typedef map27 type;
};

template<>
struct m_at_impl<27>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item27 type;
    };
};

template<>
struct m_item_impl<28>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item27;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20, typename P21, typename P22, typename P23, typename P24
    , typename P25, typename P26, typename P27
    >
struct map28
    : m_item<
          28
        , typename P27::first
        , typename P27::second
        , map27< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26 >
        >
{
    typedef map28 type;
};

template<>
struct m_at_impl<28>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item28 type;
    };
};

template<>
struct m_item_impl<29>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item28;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20, typename P21, typename P22, typename P23, typename P24
    , typename P25, typename P26, typename P27, typename P28
    >
struct map29
    : m_item<
          29
        , typename P28::first
        , typename P28::second
        , map28< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27 >
        >
{
    typedef map29 type;
};

template<>
struct m_at_impl<29>
{
    template< typename Map > struct result_
    {
        typedef typename Map::item29 type;
    };
};

template<>
struct m_item_impl<30>
{
    template< typename Key, typename T, typename Base > struct result_
        : m_item_< Key,T,Base >
    {
        typedef pair< Key,T > item29;
    };
};

template<
      typename P0, typename P1, typename P2, typename P3, typename P4
    , typename P5, typename P6, typename P7, typename P8, typename P9
    , typename P10, typename P11, typename P12, typename P13, typename P14
    , typename P15, typename P16, typename P17, typename P18, typename P19
    , typename P20, typename P21, typename P22, typename P23, typename P24
    , typename P25, typename P26, typename P27, typename P28, typename P29
    >
struct map30
    : m_item<
          30
        , typename P29::first
        , typename P29::second
        , map29< P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28 >
        >
{
    typedef map30 type;
};

}}


code:
/*=============================================================================
    Copyright (c) 2009 Christopher Schmidt

    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_FUSION_CONTAINER_SET_DETAIL_KEY_OF_IMPL_HPP
#define BOOST_FUSION_CONTAINER_SET_DETAIL_KEY_OF_IMPL_HPP

#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/set/detail/value_of_data_impl.hpp>

namespace boost { namespace fusion { namespace extension
{
    template <typename>
    struct key_of_impl;

    template <>
    struct key_of_impl<set_iterator_tag>
      : value_of_impl<set_iterator_tag>
    {};
}}}

#endif


code:
/*=============================================================================
    Copyright (c) 2001-2007 Joel de Guzman

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(FUSION_INCLUDE_AS_VECTOR)
#define FUSION_INCLUDE_AS_VECTOR

#include <boost/fusion/support/config.hpp>
#include <boost/fusion/container/vector/convert.hpp>

#endif


code:
# /* Copyright (C) 2001
#  * Housemarque Oy
#  * http://www.housemarque.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)
#  */
#
# /* Revised by Paul Mensonides (2002) */
#
# /* See http://www.boost.org for most recent version. */
#
# ifndef BOOST_PREPROCESSOR_CONTROL_WHILE_HPP
# define BOOST_PREPROCESSOR_CONTROL_WHILE_HPP
#
# include <boost/preprocessor/cat.hpp>
# include <boost/preprocessor/config/config.hpp>
# include <boost/preprocessor/debug/error.hpp>
# include <boost/preprocessor/detail/auto_rec.hpp>
# include <boost/preprocessor/list/fold_left.hpp>
# include <boost/preprocessor/list/fold_right.hpp>
# include <boost/preprocessor/logical/bitand.hpp>
#
# /* BOOST_PP_WHILE */
#
# if 0
#    define BOOST_PP_WHILE(pred, op, state)
# endif
#
# define BOOST_PP_WHILE BOOST_PP_CAT(BOOST_PP_WHILE_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
#
# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
#    define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_CHECK_, BOOST_PP_LIST_FOLD_RIGHT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL))))
# else
#    define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)))
# endif
#
# define BOOST_PP_WHILE_F(d, _) 0
#
# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
#    include <boost/preprocessor/control/detail/edg/while.hpp>
# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
#    include <boost/preprocessor/control/detail/msvc/while.hpp>
# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
#    include <boost/preprocessor/control/detail/dmc/while.hpp>
# else
#    include <boost/preprocessor/control/detail/while.hpp>
# endif
#
# define BOOST_PP_WHILE_257(p, o, s) BOOST_PP_ERROR(0x0001)
#
# define BOOST_PP_WHILE_CHECK_BOOST_PP_NIL 1
#
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_1(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_2(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_3(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_4(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_5(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_6(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_7(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_8(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_9(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_10(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_11(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_12(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_13(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_14(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_15(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_16(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_17(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_18(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_19(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_20(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_21(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_22(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_23(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_24(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_25(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_26(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_27(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_28(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_29(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_30(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_31(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_32(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_33(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_34(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_35(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_36(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_37(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_38(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_39(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_40(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_41(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_42(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_43(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_44(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_45(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_46(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_47(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_48(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_49(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_50(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_51(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_52(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_53(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_54(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_55(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_56(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_57(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_58(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_59(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_60(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_61(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_62(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_63(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_64(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_65(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_66(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_67(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_68(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_69(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_70(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_71(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_72(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_73(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_74(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_75(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_76(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_77(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_78(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_79(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_80(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_81(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_82(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_83(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_84(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_85(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_86(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_87(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_88(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_89(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_90(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_91(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_92(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_93(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_94(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_95(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_96(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_97(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_98(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_99(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_100(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_101(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_102(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_103(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_104(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_105(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_106(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_107(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_108(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_109(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_110(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_111(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_112(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_113(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_114(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_115(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_116(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_117(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_118(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_119(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_120(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_121(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_122(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_123(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_124(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_125(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_126(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_127(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_128(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_129(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_130(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_131(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_132(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_133(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_134(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_135(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_136(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_137(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_138(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_139(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_140(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_141(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_142(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_143(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_144(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_145(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_146(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_147(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_148(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_149(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_150(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_151(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_152(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_153(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_154(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_155(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_156(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_157(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_158(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_159(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_160(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_161(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_162(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_163(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_164(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_165(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_166(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_167(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_168(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_169(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_170(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_171(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_172(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_173(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_174(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_175(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_176(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_177(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_178(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_179(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_180(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_181(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_182(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_183(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_184(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_185(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_186(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_187(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_188(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_189(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_190(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_191(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_192(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_193(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_194(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_195(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_196(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_197(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_198(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_199(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_200(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_201(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_202(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_203(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_204(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_205(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_206(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_207(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_208(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_209(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_210(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_211(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_212(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_213(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_214(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_215(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_216(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_217(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_218(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_219(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_220(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_221(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_222(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_223(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_224(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_225(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_226(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_227(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_228(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_229(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_230(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_231(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_232(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_233(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_234(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_235(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_236(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_237(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_238(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_239(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_240(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_241(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_242(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_243(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_244(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_245(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_246(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_247(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_248(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_249(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_250(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_251(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_252(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_253(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_254(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_255(p, o, s) 0
# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_256(p, o, s) 0
#
# endif


code:
/*=============================================================================
    Copyright (c) 2011 Eric Niebler

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_FIND_FWD_HPP_INCLUDED)
#define BOOST_FUSION_FIND_FWD_HPP_INCLUDED

#include <boost/fusion/support/config.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_const.hpp>

namespace boost { namespace fusion
{
    namespace result_of
    {
        template <typename Sequence, typename T>
        struct find;
    }

    template <typename T, typename Sequence>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline typename
        lazy_disable_if<
            is_const<Sequence>
          , result_of::find<Sequence, T>
        >::type const
    find(Sequence& seq);

    template <typename T, typename Sequence>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    inline typename result_of::find<Sequence const, T>::type const
    find(Sequence const& seq);
}}

#endif


code:
/*=============================================================================
 Copyright (c) 2001-2010 Joel de Guzman

 Distributed under the Boost Software License, Version 1.0. (See accompanying
 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
#ifndef BOOST_PHOENIX_CORE_HPP
#define BOOST_PHOENIX_CORE_HPP

#include <boost/phoenix/version.hpp>
#include <boost/phoenix/core/limits.hpp>
#include <boost/phoenix/core/actor.hpp>
#include <boost/phoenix/core/debug.hpp>
#include <boost/phoenix/core/is_actor.hpp>
#include <boost/phoenix/core/argument.hpp>
#include <boost/phoenix/core/value.hpp>
#include <boost/phoenix/core/reference.hpp>
#include <boost/phoenix/core/nothing.hpp>
#include <boost/phoenix/core/function_equal.hpp>
#include <boost/phoenix/core/visit_each.hpp>
#include <boost/phoenix/core/v2_eval.hpp>
#include <boost/phoenix/scope/local_variable.hpp> // to fix 5824
#include <boost/proto/generate.hpp> // attempt to fix problems in intel 14.0.1

#endif


code:
// Copyright (C) 2005-2011 Daniel James
// 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_UNORDERED_DETAIL_EXTRACT_KEY_HPP_INCLUDED
#define BOOST_UNORDERED_DETAIL_EXTRACT_KEY_HPP_INCLUDED

#include <boost/config.hpp>
#if defined(BOOST_HAS_PRAGMA_ONCE)
#pragma once
#endif

#include <boost/unordered/detail/table.hpp>

namespace boost {
namespace unordered {
namespace detail {

    // key extractors
    //
    // no throw
    //
    // 'extract_key' is called with the emplace parameters to return a
    // key if available or 'no_key' is one isn't and will need to be
    // constructed. This could be done by overloading the emplace implementation
    // for the different cases, but that's a bit tricky on compilers without
    // variadic templates.

    struct no_key {
        no_key() {}
        template <class T> no_key(T const&) {}
    };

    template <typename Key, typename T>
    struct is_key {
        template <typename T2>
        static choice1::type test(T2 const&);
        static choice2::type test(Key const&);

        enum { value = sizeof(test(boost::unordered::detail::make<T>())) ==
            sizeof(choice2::type) };

        typedef typename boost::detail::if_true<value>::
            BOOST_NESTED_TEMPLATE then<Key const&, no_key>::type type;
    };

    template <class ValueType>
    struct set_extractor
    {
        typedef ValueType value_type;
        typedef ValueType key_type;

        static key_type const& extract(value_type const& v)
        {
            return v;
        }

        static no_key extract()
        {
            return no_key();
        }

        template <class Arg>
        static no_key extract(Arg const&)
        {
            return no_key();
        }

#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
        template <class Arg1, class Arg2, class... Args>
        static no_key extract(Arg1 const&, Arg2 const&, Args const&...)
        {
            return no_key();
        }
#else
        template <class Arg1, class Arg2>
        static no_key extract(Arg1 const&, Arg2 const&)
        {
            return no_key();
        }
#endif
    };

    template <class Key, class ValueType>
    struct map_extractor
    {
        typedef ValueType value_type;
        typedef typename boost::remove_const<Key>::type key_type;

        static key_type const& extract(value_type const& v)
        {
            return v.first;
        }

        template <class Second>
        static key_type const& extract(std::pair<key_type, Second> const& v)
        {
            return v.first;
        }

        template <class Second>
        static key_type const& extract(
            std::pair<key_type const, Second> const& v)
        {
            return v.first;
        }

        template <class Arg1>
        static key_type const& extract(key_type const& k, Arg1 const&)
        {
            return k;
        }

        static no_key extract()
        {
            return no_key();
        }

        template <class Arg>
        static no_key extract(Arg const&)
        {
            return no_key();
        }

        template <class Arg1, class Arg2>
        static no_key extract(Arg1 const&, Arg2 const&)
        {
            return no_key();
        }

#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
        template <class Arg1, class Arg2, class Arg3, class... Args>
        static no_key extract(Arg1 const&, Arg2 const&, Arg3 const&,
                Args const&...)
        {
            return no_key();
        }
#endif

#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)

#define BOOST_UNORDERED_KEY_FROM_TUPLE(namespace_)                          \
        template <typename T2>                                              \
        static no_key extract(boost::unordered::piecewise_construct_t,      \
                namespace_ tuple<> const&, T2 const&)                       \
        {                                                                   \
            return no_key();                                                \
        }                                                                   \
                                                                            \
        template <typename T, typename T2>                                  \
        static typename is_key<key_type, T>::type                           \
            extract(boost::unordered::piecewise_construct_t,                \
                namespace_ tuple<T> const& k, T2 const&)                    \
        {                                                                   \
            return typename is_key<key_type, T>::type(                      \
                namespace_ get<0>(k));                                      \
        }

#else

#define BOOST_UNORDERED_KEY_FROM_TUPLE(namespace_)                          \
        static no_key extract(boost::unordered::piecewise_construct_t,      \
                namespace_ tuple<> const&)                                  \
        {                                                                   \
            return no_key();                                                \
        }                                                                   \
                                                                            \
        template <typename T>                                               \
        static typename is_key<key_type, T>::type                           \
            extract(boost::unordered::piecewise_construct_t,                \
                namespace_ tuple<T> const& k)                               \
        {                                                                   \
            return typename is_key<key_type, T>::type(                      \
                namespace_ get<0>(k));                                      \
        }

#endif

BOOST_UNORDERED_KEY_FROM_TUPLE(boost::)

#if !defined(BOOST_NO_CXX11_HDR_TUPLE)
BOOST_UNORDERED_KEY_FROM_TUPLE(std::)
#endif
    };
}}}

#endif