/*============================================================================= Copyright (c) 2001-2014 Joel de Guzman Copyright (c) 2013 Agustin Berge http://spirit.sourceforge.net/ 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_SPIRIT_X3_ATTRIBUTE_OF_JAN_7_2012_0914AM) #define BOOST_SPIRIT_X3_ATTRIBUTE_OF_JAN_7_2012_0914AM #include #include #include namespace boost { namespace spirit { namespace x3 { namespace traits { /////////////////////////////////////////////////////////////////////////// // Get the attribute type of a component. By default, this gets the // Component's attribute_type typedef or instantiates a nested attribute // metafunction. Components may specialize this if such an attribute_type // is not readily available (e.g. expensive to compute at compile time). /////////////////////////////////////////////////////////////////////////// template struct attribute_of; namespace detail { template struct default_attribute_of; template struct default_attribute_of::type> : mpl::identity {}; template struct default_attribute_of::type>::type> : Component::template attribute {}; template struct default_attribute_of::type> : attribute_of{}; } template struct attribute_of : detail::default_attribute_of {}; }}}} #endif