summaryrefslogtreecommitdiff
path: root/boost/fusion/adapted/adt
diff options
context:
space:
mode:
Diffstat (limited to 'boost/fusion/adapted/adt')
-rw-r--r--boost/fusion/adapted/adt/adapt_adt.hpp73
-rw-r--r--boost/fusion/adapted/adt/adapt_adt_named.hpp30
-rw-r--r--boost/fusion/adapted/adt/adapt_assoc_adt.hpp90
-rw-r--r--boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp28
-rw-r--r--boost/fusion/adapted/adt/detail/adapt_base.hpp181
-rw-r--r--boost/fusion/adapted/adt/detail/extension.hpp24
6 files changed, 426 insertions, 0 deletions
diff --git a/boost/fusion/adapted/adt/adapt_adt.hpp b/boost/fusion/adapted/adt/adapt_adt.hpp
new file mode 100644
index 0000000000..454ac922e5
--- /dev/null
+++ b/boost/fusion/adapted/adt/adapt_adt.hpp
@@ -0,0 +1,73 @@
+/*=============================================================================
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2009-2010 Hartmut Kaiser
+ Copyright (c) 2010-2011 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_HPP
+#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_HPP
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+#include <boost/fusion/adapted/struct/detail/extension.hpp>
+#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
+#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/size_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/begin_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/end_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_of_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/deref_impl.hpp>
+#include <boost/fusion/adapted/adt/detail/extension.hpp>
+#include <boost/fusion/adapted/adt/detail/adapt_base.hpp>
+
+#define BOOST_FUSION_ADAPT_ADT_FILLER_0(A, B, C, D)\
+ ((A, B, C, D)) BOOST_FUSION_ADAPT_ADT_FILLER_1
+#define BOOST_FUSION_ADAPT_ADT_FILLER_1(A, B, C, D)\
+ ((A, B, C, D)) BOOST_FUSION_ADAPT_ADT_FILLER_0
+#define BOOST_FUSION_ADAPT_ADT_FILLER_0_END
+#define BOOST_FUSION_ADAPT_ADT_FILLER_1_END
+
+#define BOOST_FUSION_ADAPT_ADT_C(TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE) \
+ BOOST_FUSION_ADAPT_ADT_C_BASE( \
+ TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE, 4)
+
+#define BOOST_FUSION_ADAPT_TPL_ADT(TEMPLATE_PARAMS_SEQ, NAME_SEQ , ATTRIBUTES) \
+ BOOST_FUSION_ADAPT_STRUCT_BASE( \
+ (1)TEMPLATE_PARAMS_SEQ, \
+ (1)NAME_SEQ, \
+ struct_tag, \
+ 0, \
+ BOOST_PP_CAT(BOOST_FUSION_ADAPT_ADT_FILLER_0(0,0,0,0)ATTRIBUTES,_END), \
+ BOOST_FUSION_ADAPT_ADT_C)
+
+#define BOOST_FUSION_ADAPT_ADT(NAME, ATTRIBUTES) \
+ BOOST_FUSION_ADAPT_STRUCT_BASE( \
+ (0), \
+ (0)(NAME), \
+ struct_tag, \
+ 0, \
+ BOOST_PP_CAT(BOOST_FUSION_ADAPT_ADT_FILLER_0(0,0,0,0)ATTRIBUTES,_END), \
+ BOOST_FUSION_ADAPT_ADT_C)
+
+#define BOOST_FUSION_ADAPT_ADT_AS_VIEW(NAME, ATTRIBUTES) \
+ BOOST_FUSION_ADAPT_STRUCT_BASE( \
+ (0), \
+ (0)(NAME), \
+ struct_tag, \
+ 1, \
+ BOOST_PP_CAT(BOOST_FUSION_ADAPT_ADT_FILLER_0(0,0,0,0)ATTRIBUTES,_END), \
+ BOOST_FUSION_ADAPT_ADT_C)
+
+#endif
diff --git a/boost/fusion/adapted/adt/adapt_adt_named.hpp b/boost/fusion/adapted/adt/adapt_adt_named.hpp
new file mode 100644
index 0000000000..c2ace0130c
--- /dev/null
+++ b/boost/fusion/adapted/adt/adapt_adt_named.hpp
@@ -0,0 +1,30 @@
+/*=============================================================================
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2009-2010 Hartmut Kaiser
+ Copyright (c) 2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_NAMED_HPP
+#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_NAMED_HPP
+
+#include <boost/fusion/adapted/adt/adapt_adt.hpp>
+#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
+
+#define BOOST_FUSION_ADAPT_ADT_NAMED_NS( \
+ WRAPPED_TYPE, NAMESPACE_SEQ, NAME, ATTRIBUTES) \
+ \
+ BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE_IMPL( \
+ WRAPPED_TYPE,(0)NAMESPACE_SEQ,NAME) \
+ \
+ BOOST_FUSION_ADAPT_ADT_AS_VIEW( \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ)NAME, \
+ ATTRIBUTES)
+
+#define BOOST_FUSION_ADAPT_ADT_NAMED(WRAPPED_TYPE, NAME, ATTRIBUTES) \
+ BOOST_FUSION_ADAPT_ADT_NAMED_NS( \
+ WRAPPED_TYPE,(boost)(fusion)(adapted),NAME,ATTRIBUTES)
+
+#endif
diff --git a/boost/fusion/adapted/adt/adapt_assoc_adt.hpp b/boost/fusion/adapted/adt/adapt_assoc_adt.hpp
new file mode 100644
index 0000000000..cce1dfb081
--- /dev/null
+++ b/boost/fusion/adapted/adt/adapt_assoc_adt.hpp
@@ -0,0 +1,90 @@
+/*=============================================================================
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2007 Dan Marsden
+ Copyright (c) 2010-2011 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_HPP
+#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_HPP
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+#include <boost/fusion/adapted/struct/detail/extension.hpp>
+#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
+#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/size_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/begin_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/end_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_of_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/deref_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/deref_data_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/key_of_impl.hpp>
+#include <boost/fusion/adapted/struct/detail/value_of_data_impl.hpp>
+#include <boost/fusion/adapted/adt/detail/extension.hpp>
+#include <boost/fusion/adapted/adt/detail/adapt_base.hpp>
+
+#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(A, B, C, D, E)\
+ ((A, B, C, D, E)) BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1
+#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1(A, B, C, D, E)\
+ ((A, B, C, D, E)) BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0
+#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0_END
+#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1_END
+
+#define BOOST_FUSION_ADAPT_ASSOC_ADT_C( \
+ TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE) \
+ \
+ BOOST_FUSION_ADAPT_ADT_C_BASE(TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,ATTRIBUTE,5) \
+ \
+ template< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
+ > \
+ struct struct_assoc_key<BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ), I> \
+ { \
+ typedef BOOST_PP_TUPLE_ELEM(5, 4, ATTRIBUTE) type; \
+ };
+
+#define BOOST_FUSION_ADAPT_ASSOC_TPL_ADT( \
+ TEMPLATE_PARAMS_SEQ, NAME_SEQ, ATTRIBUTES) \
+ \
+ BOOST_FUSION_ADAPT_STRUCT_BASE( \
+ (1)TEMPLATE_PARAMS_SEQ, \
+ (1)NAME_SEQ, \
+ assoc_struct_tag, \
+ 0, \
+ BOOST_PP_CAT( \
+ BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(0,0,0,0,0)ATTRIBUTES,_END), \
+ BOOST_FUSION_ADAPT_ASSOC_ADT_C)
+
+#define BOOST_FUSION_ADAPT_ASSOC_ADT(NAME, ATTRIBUTES) \
+ BOOST_FUSION_ADAPT_STRUCT_BASE( \
+ (0), \
+ (0)(NAME), \
+ assoc_struct_tag, \
+ 0, \
+ BOOST_PP_CAT( \
+ BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(0,0,0,0,0)ATTRIBUTES,_END), \
+ BOOST_FUSION_ADAPT_ASSOC_ADT_C)
+
+#define BOOST_FUSION_ADAPT_ASSOC_ADT_AS_VIEW(NAME, ATTRIBUTES) \
+ BOOST_FUSION_ADAPT_STRUCT_BASE( \
+ (0), \
+ (0)(NAME), \
+ assoc_struct_tag, \
+ 1, \
+ BOOST_PP_CAT( \
+ BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(0,0,0,0,0)ATTRIBUTES,_END), \
+ BOOST_FUSION_ADAPT_ASSOC_ADT_C)
+
+#endif
diff --git a/boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp b/boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp
new file mode 100644
index 0000000000..b875982533
--- /dev/null
+++ b/boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp
@@ -0,0 +1,28 @@
+/*=============================================================================
+ Copyright (c) 2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_NAMED_HPP
+#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_NAMED_HPP
+
+#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
+#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
+
+#define BOOST_FUSION_ADAPT_ASSOC_ADT_NAMED_NS( \
+ WRAPPED_TYPE, NAMESPACE_SEQ, NAME, ATTRIBUTES) \
+ \
+ BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE_IMPL( \
+ WRAPPED_TYPE,(0)NAMESPACE_SEQ,NAME) \
+ \
+ BOOST_FUSION_ADAPT_ASSOC_ADT_AS_VIEW( \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ)NAME, \
+ ATTRIBUTES)
+
+#define BOOST_FUSION_ADAPT_ASSOC_ADT_NAMED(WRAPPED_TYPE, NAME, ATTRIBUTES) \
+ BOOST_FUSION_ADAPT_ASSOC_ADT_NAMED_NS( \
+ WRAPPED_TYPE,(boost)(fusion)(adapted),NAME,ATTRIBUTES)
+
+#endif
diff --git a/boost/fusion/adapted/adt/detail/adapt_base.hpp b/boost/fusion/adapted/adt/detail/adapt_base.hpp
new file mode 100644
index 0000000000..bddc79de7e
--- /dev/null
+++ b/boost/fusion/adapted/adt/detail/adapt_base.hpp
@@ -0,0 +1,181 @@
+/*=============================================================================
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Copyright (c) 2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_HPP
+#define BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_HPP
+
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+#define BOOST_FUSION_ADAPT_ADT_GET_IDENTITY_TEMPLATE_IMPL(TEMPLATE_PARAMS_SEQ) \
+ typename detail::get_identity< \
+ lvalue \
+ , BOOST_PP_SEQ_ELEM(1,TEMPLATE_PARAMS_SEQ) \
+ >::type
+
+#define BOOST_FUSION_ADAPT_ADT_GET_IDENTITY_NON_TEMPLATE_IMPL( \
+ TEMPLATE_PARAMS_SEQ) \
+ \
+ boost::remove_const<boost::remove_reference<lvalue>::type>::type
+
+#define BOOST_FUSION_ADAPT_ADT_C_BASE( \
+ TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,ATTRIBUTE,ATTRIBUTE_TUPEL_SIZE) \
+ \
+ template< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
+ > \
+ struct access::adt_attribute_access< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
+ , I \
+ > \
+ { \
+ template<class Val> \
+ static void \
+ boost_fusion_adapt_adt_impl_set( \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj, \
+ Val const& val) \
+ { \
+ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 3, ATTRIBUTE); \
+ } \
+ \
+ static BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) \
+ boost_fusion_adapt_adt_impl_get( \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj) \
+ { \
+ return BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 2, ATTRIBUTE); \
+ } \
+ \
+ static BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) \
+ boost_fusion_adapt_adt_impl_get( \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const& obj) \
+ { \
+ return BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 2, ATTRIBUTE); \
+ } \
+ }; \
+ \
+ template< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
+ > \
+ struct adt_attribute_proxy< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
+ , I \
+ , true \
+ > \
+ { \
+ typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) type; \
+ \
+ explicit \
+ adt_attribute_proxy( \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const& o) \
+ : obj(&o) \
+ {} \
+ \
+ type get() const \
+ { \
+ return access::adt_attribute_access< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
+ , I \
+ >::boost_fusion_adapt_adt_impl_get(*obj); \
+ } \
+ \
+ operator type() const \
+ { \
+ return get(); \
+ } \
+ \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const* obj; \
+ }; \
+ \
+ template< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
+ > \
+ struct adt_attribute_proxy< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
+ , I \
+ , false \
+ > \
+ { \
+ typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) type; \
+ \
+ explicit \
+ adt_attribute_proxy( \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& o) \
+ : obj(&o) \
+ {} \
+ \
+ template<class Val> \
+ adt_attribute_proxy& \
+ operator=(Val const& val) \
+ { \
+ access::adt_attribute_access< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
+ , I \
+ >::boost_fusion_adapt_adt_impl_set(*obj, val); \
+ return *this; \
+ } \
+ \
+ type get() const \
+ { \
+ return access::adt_attribute_access< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
+ , I \
+ >::boost_fusion_adapt_adt_impl_get(*obj); \
+ } \
+ \
+ operator type() const \
+ { \
+ return get(); \
+ } \
+ \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)* obj; \
+ }; \
+ \
+ template< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
+ > \
+ struct access::struct_member< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
+ , I \
+ > \
+ { \
+ typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) lvalue; \
+ BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
+ TEMPLATE_PARAMS_SEQ) \
+ \
+ typedef \
+ BOOST_PP_IF( \
+ BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), \
+ BOOST_FUSION_ADAPT_ADT_GET_IDENTITY_TEMPLATE_IMPL, \
+ BOOST_FUSION_ADAPT_ADT_GET_IDENTITY_NON_TEMPLATE_IMPL)( \
+ TEMPLATE_PARAMS_SEQ) \
+ type; \
+ \
+ template<typename Seq> \
+ struct apply \
+ { \
+ typedef \
+ adt_attribute_proxy< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
+ , I \
+ , is_const<Seq>::value \
+ > \
+ type; \
+ \
+ static type \
+ call(Seq& obj) \
+ { \
+ return type(obj); \
+ } \
+ }; \
+ };
+
+#endif
diff --git a/boost/fusion/adapted/adt/detail/extension.hpp b/boost/fusion/adapted/adt/detail/extension.hpp
new file mode 100644
index 0000000000..50c40cf34e
--- /dev/null
+++ b/boost/fusion/adapted/adt/detail/extension.hpp
@@ -0,0 +1,24 @@
+/*=============================================================================
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Copyright (c) 2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_ADAPTED_ADT_DETAIL_EXTENSION_HPP
+#define BOOST_FUSION_ADAPTED_ADT_DETAIL_EXTENSION_HPP
+
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename T, typename Dummy>
+ struct get_identity
+ : remove_const<typename remove_reference<T>::type>
+ {};
+}}}
+
+#endif