/*============================================================================= Copyright (c) 1999-2003 Jaakko Järvi Copyright (c) 2001-2003 Joel de Guzman Copyright (c) 2004 Peder Holt Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(FUSION_SEQUENCE_AT_HPP) #define FUSION_SEQUENCE_AT_HPP #include #include #include namespace boost { namespace fusion { namespace meta { template struct at_impl { template struct apply; }; template struct at_c { typedef as_fusion_sequence seq_converter; typedef typename seq_converter::type seq; typedef typename at_impl:: template apply::type type; }; template struct at : at_c {}; } #if! BOOST_WORKAROUND(BOOST_MSVC, < 1300) template inline typename meta::at_c::type at(sequence_base const& seq FUSION_GET_MSVC_WORKAROUND) { typedef meta::at_c at_meta; return meta::at_impl:: template apply::call( at_meta::seq_converter::convert_const(seq.cast())); } template inline typename meta::at_c::type at(sequence_base& seq FUSION_GET_MSVC_WORKAROUND) { typedef meta::at_c at_meta; return meta::at_impl:: template apply::call( at_meta::seq_converter::convert(seq.cast())); } #endif }} #endif