1 /*============================================================================= 2 Copyright (c) 2001-2011 Joel de Guzman 3 4 Distributed under the Boost Software License, Version 1.0. (See accompanying 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 =============================================================================*/ 7 #if !defined(SPIRIT_SEQUENCE_BASE_ID_MAR_15_2009_1243PM) 8 #define SPIRIT_SEQUENCE_BASE_ID_MAR_15_2009_1243PM 9 10 #if defined(_MSC_VER) 11 #pragma once 12 #endif 13 14 #include <boost/mpl/has_xxx.hpp> 15 #include <boost/utility/enable_if.hpp> 16 #include <boost/spirit/home/support/attributes.hpp> 17 18 namespace boost { namespace spirit { namespace traits 19 { 20 namespace detail 21 { 22 BOOST_MPL_HAS_XXX_TRAIT_DEF(sequence_base_id) 23 } 24 25 // We specialize this for sequences (see support/attributes.hpp). 26 // For sequences, we only wrap the attribute in a tuple IFF 27 // it is not already a fusion tuple. 28 // 29 // Note: in the comment above, "sequence" is a spirit sequence 30 // component (parser or generator), and a tuple is a fusion sequence 31 // (to avoid terminology confusion). 32 template <typename Derived, typename Attribute> 33 struct pass_attribute<Derived, Attribute, 34 typename enable_if<detail::has_sequence_base_id<Derived> >::type> 35 : wrap_if_not_tuple<Attribute> {}; 36 37 }}} 38 39 #endif 40