/*=============================================================================

    Copyright (c) 1999-2003 Jaakko Järvi

    Copyright (c) 2001-2006 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_AS_FUSION_ELEMENT_05052005_0338)

#define FUSION_AS_FUSION_ELEMENT_05052005_0338



#include <boost/ref.hpp>



namespace boost { namespace fusion { namespace detail

{

    template <typename T>

    struct as_fusion_element

    {

        typedef T type;

    };



    template <typename T>

    struct as_fusion_element<reference_wrapper<T> >

    {

        typedef T& type;

    };



    template <typename T, int N>

    struct as_fusion_element<T[N]>

    {

        typedef const T(&type)[N];

    };



    template <typename T, int N>

    struct as_fusion_element<volatile T[N]>

    {

        typedef const volatile T(&type)[N];

    };



    template <typename T, int N>

    struct as_fusion_element<const volatile T[N]>

    {

        typedef const volatile T(&type)[N];

    };



}}}



#endif

