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

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
    
    
    
    
    
    
    
        template <typename F, typename A0>
        struct function<F, A0>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0
            >
        {};
    
    
    
    
    
    
    
        template <typename F, typename A0 , typename A1>
        struct function<F, A0 , A1>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0 , A1
            >
        {};
    
    
    
    
    
    
    
        template <typename F, typename A0 , typename A1 , typename A2>
        struct function<F, A0 , A1 , A2>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0 , A1 , A2
            >
        {};
    
    
    
    
    
    
    
        template <typename F, typename A0 , typename A1 , typename A2 , typename A3>
        struct function<F, A0 , A1 , A2 , A3>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0 , A1 , A2 , A3
            >
        {};
    
    
    
    
    
    
    
        template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
        struct function<F, A0 , A1 , A2 , A3 , A4>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0 , A1 , A2 , A3 , A4
            >
        {};
    
    
    
    
    
    
    
        template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
        struct function<F, A0 , A1 , A2 , A3 , A4 , A5>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0 , A1 , A2 , A3 , A4 , A5
            >
        {};
    
    
    
    
    
    
    
        template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
        struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0 , A1 , A2 , A3 , A4 , A5 , A6
            >
        {};
    
    
    
    
    
    
    
        template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
        struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
            >
        {};
    
    
    
    
    
    
    
        template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
        struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
            >
        {};
    
    
    
    
    
    
    
        template <typename F, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
        struct function<F, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>
            : proto::result_of::make_expr<
                proto::tag::function
              , phoenix_domain
              , F
              , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9
            >
        {};
