|
Boost-Commit : |
From: gordon_at_[hidden]
Date: 2008-08-25 13:42:29
Author: gordon.woodhull
Date: 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
New Revision: 48382
URL: http://svn.boost.org/trac/boost/changeset/48382
Log:
merging in fusion/intrusive changes from trunk
Added:
sandbox/metagraph/boost/fusion/include/at_c.hpp
- copied unchanged from r48381, /trunk/boost/fusion/include/at_c.hpp
sandbox/metagraph/boost/fusion/sequence/intrinsic/at_c.hpp
- copied unchanged from r48381, /trunk/boost/fusion/sequence/intrinsic/at_c.hpp
sandbox/metagraph/boost/fusion/tuple/detail/tuple_expand.hpp
- copied unchanged from r48381, /trunk/boost/fusion/tuple/detail/tuple_expand.hpp
Removed:
sandbox/metagraph/boost/fusion/tuple/detail/tuple_forward_ctor.hpp
sandbox/metagraph/boost/intrusive/detail/parent_from_member.hpp
Text files modified:
sandbox/metagraph/boost/fusion/container/list/detail/at_impl.hpp | 85 ++++++++++++++++++++++++++++++++-------
sandbox/metagraph/boost/fusion/functional/invocation/invoke.hpp | 28 ++++++------
sandbox/metagraph/boost/fusion/functional/invocation/invoke_function_object.hpp | 24 +++++-----
sandbox/metagraph/boost/fusion/functional/invocation/invoke_procedure.hpp | 12 ++--
sandbox/metagraph/boost/fusion/tuple/tuple.hpp | 38 ++++++++++++-----
sandbox/metagraph/boost/intrusive/detail/any_node_and_algorithms.hpp | 23 ++++------
sandbox/metagraph/boost/intrusive/detail/common_slist_algorithms.hpp | 2
sandbox/metagraph/boost/intrusive/detail/utilities.hpp | 2
sandbox/metagraph/boost/intrusive/member_value_traits.hpp | 2
9 files changed, 140 insertions(+), 76 deletions(-)
Modified: sandbox/metagraph/boost/fusion/container/list/detail/at_impl.hpp
==============================================================================
--- sandbox/metagraph/boost/fusion/container/list/detail/at_impl.hpp (original)
+++ sandbox/metagraph/boost/fusion/container/list/detail/at_impl.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
@@ -1,7 +1,7 @@
/*=============================================================================
Copyright (c) 2001-2006 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_AT_IMPL_07172005_0726)
@@ -15,6 +15,71 @@
namespace boost { namespace fusion
{
+ namespace detail
+ {
+ template <typename Cons>
+ struct cons_deref
+ {
+ typedef typename Cons::car_type type;
+ };
+
+ template <typename Cons, int I>
+ struct cons_advance
+ {
+ typedef typename
+ cons_advance<Cons, I-1>::type::cdr_type
+ type;
+ };
+
+ template <typename Cons>
+ struct cons_advance<Cons, 0>
+ {
+ typedef Cons type;
+ };
+
+ template <typename Cons>
+ struct cons_advance<Cons, 1>
+ {
+ typedef typename Cons::cdr_type type;
+ };
+
+ template <typename Cons>
+ struct cons_advance<Cons, 2>
+ {
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above
+ typedef typename Cons::cdr_type::cdr_type type;
+#else
+ typedef typename Cons::cdr_type _a;
+ typedef typename _a::cdr_type type;
+#endif
+ };
+
+ template <typename Cons>
+ struct cons_advance<Cons, 3>
+ {
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above
+ typedef typename Cons::cdr_type::cdr_type::cdr_type type;
+#else
+ typedef typename Cons::cdr_type _a;
+ typedef typename _a::cdr_type _b;
+ typedef typename _b::cdr_type type;
+#endif
+ };
+
+ template <typename Cons>
+ struct cons_advance<Cons, 4>
+ {
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above
+ typedef typename Cons::cdr_type::cdr_type::cdr_type::cdr_type type;
+#else
+ typedef typename Cons::cdr_type _a;
+ typedef typename _a::cdr_type _b;
+ typedef typename _b::cdr_type _c;
+ typedef typename _c::cdr_type type;
+#endif
+ };
+ }
+
struct cons_tag;
namespace extension
@@ -26,22 +91,10 @@
struct at_impl<cons_tag>
{
template <typename Sequence, typename N>
- struct apply
+ struct apply
{
- typedef typename
- mpl::eval_if<
- is_const<Sequence>
- , add_const<typename Sequence::cdr_type>
- , mpl::identity<typename Sequence::cdr_type>
- >::type
- cdr_type;
-
- typedef typename
- mpl::eval_if<
- mpl::bool_<N::value == 0>
- , mpl::identity<typename Sequence::car_type>
- , apply<cdr_type, mpl::int_<N::value-1> >
- >
+ typedef detail::cons_deref<
+ typename detail::cons_advance<Sequence, N::value>::type>
element;
typedef typename
Modified: sandbox/metagraph/boost/fusion/functional/invocation/invoke.hpp
==============================================================================
--- sandbox/metagraph/boost/fusion/functional/invocation/invoke.hpp (original)
+++ sandbox/metagraph/boost/fusion/functional/invocation/invoke.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
@@ -1,8 +1,8 @@
/*=============================================================================
- Copyright (c) 2005-2006 João Abecasis
+ Copyright (c) 2005-2006 Joao Abecasis
Copyright (c) 2006-2007 Tobias Schwinger
-
- Use modification and distribution are subject to the Boost Software
+
+ Use modification and distribution are 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).
==============================================================================*/
@@ -71,21 +71,21 @@
{
namespace ft = function_types;
- template<
- typename Function, class Sequence,
+ template<
+ typename Function, class Sequence,
int N = result_of::size<Sequence>::value,
bool CBI = ft::is_callable_builtin<Function>::value,
bool RandomAccess = traits::is_random_access<Sequence>::value
>
struct invoke_impl;
- template <class Sequence, int N>
+ template <class Sequence, int N>
struct invoke_param_types;
template <typename T, class Sequence>
struct invoke_data_member;
- template <typename Function, class Sequence, int N, bool RandomAccess>
+ template <typename Function, class Sequence, int N, bool RandomAccess>
struct invoke_mem_fn;
#define BOOST_PP_FILENAME_1 <boost/fusion/functional/invocation/invoke.hpp>
@@ -116,7 +116,7 @@
invoke_mem_fn<Function,Sequence,1,RandomAccess>,
invoke_data_member<Function, Sequence> >,
mpl::identity< invoke_nonmember_builtin<
- Function,Sequence,1,RandomAccess> >
+ Function,Sequence,1,RandomAccess> >
>::type
{ };
@@ -139,7 +139,7 @@
public:
- typedef typename boost::add_reference<qualified_type>::type
+ typedef typename boost::add_reference<qualified_type>::type
result_type;
static inline result_type call(T C::* f, Sequence & s)
@@ -154,10 +154,10 @@
{
template <typename Function, class Sequence> struct invoke
{
- typedef typename detail::invoke_impl<
+ typedef typename detail::invoke_impl<
typename boost::remove_reference<Function>::type, Sequence
>::result_type type;
- };
+ };
}
template <typename Function, class Sequence>
@@ -242,7 +242,7 @@
public:
typedef typename boost::result_of<
- Function(BOOST_PP_ENUM_PARAMS(N,typename seq::T))
+ Function(BOOST_PP_ENUM_PARAMS(N,typename seq::T))
>::type result_type;
template <typename F>
@@ -274,7 +274,7 @@
typename seq::I0 i0 = fusion::begin(s);
BOOST_PP_REPEAT_FROM_TO(1,N,M,~)
- return (that_ptr< typename mpl::front<
+ return (that_ptr< typename mpl::front<
ft::parameter_types<Function> >::type
>::get(*i0)->*f)(BOOST_PP_ENUM_SHIFTED_PARAMS(N,*i));
}
@@ -302,5 +302,5 @@
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)
-#endif
+#endif
Modified: sandbox/metagraph/boost/fusion/functional/invocation/invoke_function_object.hpp
==============================================================================
--- sandbox/metagraph/boost/fusion/functional/invocation/invoke_function_object.hpp (original)
+++ sandbox/metagraph/boost/fusion/functional/invocation/invoke_function_object.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
@@ -1,8 +1,8 @@
/*=============================================================================
- Copyright (c) 2005-2006 João Abecasis
+ Copyright (c) 2005-2006 Joao Abecasis
Copyright (c) 2006-2007 Tobias Schwinger
-
- Use modification and distribution are subject to the Boost Software
+
+ Use modification and distribution are 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).
==============================================================================*/
@@ -51,14 +51,14 @@
namespace detail
{
- template<
- class Function, class Sequence,
+ template<
+ class Function, class Sequence,
int N = result_of::size<Sequence>::value,
- bool RandomAccess = traits::is_random_access<Sequence>::value
+ bool RandomAccess = traits::is_random_access<Sequence>::value
>
struct invoke_function_object_impl;
- template <class Sequence, int N>
+ template <class Sequence, int N>
struct invoke_function_object_param_types;
#define BOOST_PP_FILENAME_1 \
@@ -72,10 +72,10 @@
{
template <class Function, class Sequence> struct invoke_function_object
{
- typedef typename detail::invoke_function_object_impl<
+ typedef typename detail::invoke_function_object_impl<
typename boost::remove_reference<Function>::type, Sequence
>::result_type type;
- };
+ };
}
template <class Function, class Sequence>
@@ -114,7 +114,7 @@
typedef typename boost::result_of<
#define M(z,j,data) \
- typename result_of::at_c<Sequence,j>::type
+ typename result_of::at_c<Sequence,j>::type
Function (BOOST_PP_ENUM(N,M,~)) >::type result_type;
#undef M
@@ -154,7 +154,7 @@
}
};
- template <class Sequence>
+ template <class Sequence>
struct invoke_function_object_param_types<Sequence,N>
{
#if N > 0
@@ -173,5 +173,5 @@
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)
-#endif
+#endif
Modified: sandbox/metagraph/boost/fusion/functional/invocation/invoke_procedure.hpp
==============================================================================
--- sandbox/metagraph/boost/fusion/functional/invocation/invoke_procedure.hpp (original)
+++ sandbox/metagraph/boost/fusion/functional/invocation/invoke_procedure.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
@@ -1,8 +1,8 @@
/*=============================================================================
- Copyright (c) 2005-2006 João Abecasis
+ Copyright (c) 2005-2006 Joao Abecasis
Copyright (c) 2006-2007 Tobias Schwinger
-
- Use modification and distribution are subject to the Boost Software
+
+ Use modification and distribution are 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).
==============================================================================*/
@@ -58,8 +58,8 @@
{
namespace ft = function_types;
- template<
- typename Function, class Sequence,
+ template<
+ typename Function, class Sequence,
int N = result_of::size<Sequence>::value,
bool MFP = ft::is_member_function_pointer<Function>::value,
bool RandomAccess = traits::is_random_access<Sequence>::value
@@ -167,5 +167,5 @@
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)
-#endif
+#endif
Deleted: sandbox/metagraph/boost/fusion/tuple/detail/tuple_forward_ctor.hpp
==============================================================================
--- sandbox/metagraph/boost/fusion/tuple/detail/tuple_forward_ctor.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
+++ (empty file)
@@ -1,39 +0,0 @@
-/*=============================================================================
- 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)
-==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
-#if !defined(FUSION_TUPLE_FORWARD_CTOR_10032005_0815)
-#define FUSION_TUPLE_FORWARD_CTOR_10032005_0815
-
-#include <boost/preprocessor/iterate.hpp>
-#include <boost/preprocessor/repetition/enum_params.hpp>
-#include <boost/preprocessor/repetition/enum_binary_params.hpp>
-
-#define BOOST_PP_FILENAME_1 \
- <boost/fusion/tuple/detail/tuple_forward_ctor.hpp>
-#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
-#include BOOST_PP_ITERATE()
-
-#endif
-#else // defined(BOOST_PP_IS_ITERATING)
-///////////////////////////////////////////////////////////////////////////////
-//
-// Preprocessor vertical repetition code
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#define N BOOST_PP_ITERATION()
-
-#if N == 1
- explicit
-#endif
- tuple(BOOST_PP_ENUM_BINARY_PARAMS(
- N, typename detail::call_param<T, >::type _))
- : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
-
-#undef N
-#endif // defined(BOOST_PP_IS_ITERATING)
-
Modified: sandbox/metagraph/boost/fusion/tuple/tuple.hpp
==============================================================================
--- sandbox/metagraph/boost/fusion/tuple/tuple.hpp (original)
+++ sandbox/metagraph/boost/fusion/tuple/tuple.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
@@ -1,7 +1,7 @@
/*=============================================================================
Copyright (c) 2005 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
+ 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_TUPLE_10032005_0810)
@@ -16,6 +16,7 @@
#include <boost/fusion/sequence/io.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_const.hpp>
+#include <utility>
namespace boost { namespace fusion
{
@@ -23,35 +24,50 @@
struct tuple : vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>
{
typedef vector<
- BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>
+ BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>
base_type;
tuple()
: base_type() {}
-
- template <typename Sequence>
- tuple(Sequence const& rhs)
+
+ tuple(tuple const& rhs)
+ : base_type(rhs) {}
+
+ template <typename U1, typename U2>
+ tuple(std::pair<U1, U2> const& rhs)
: base_type(rhs) {}
- #include <boost/fusion/tuple/detail/tuple_forward_ctor.hpp>
+ #include <boost/fusion/tuple/detail/tuple_expand.hpp>
template <typename T>
- tuple&
- operator=(T const& rhs)
+ tuple& operator=(T const& rhs)
+ {
+ base_type::operator=(rhs);
+ return *this;
+ }
+
+ tuple& operator=(tuple const& rhs)
+ {
+ base_type::operator=(rhs);
+ return *this;
+ }
+
+ template <typename U1, typename U2>
+ tuple& operator=(std::pair<U1, U2> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
};
- template <typename Tuple>
+ template <typename Tuple>
struct tuple_size : result_of::size<Tuple> {};
- template <int N, typename Tuple>
+ template <int N, typename Tuple>
struct tuple_element : result_of::value_at_c<Tuple, N> {};
template <int N, typename Tuple>
- inline typename
+ inline typename
lazy_disable_if<
is_const<Tuple>
, result_of::at_c<Tuple, N>
Modified: sandbox/metagraph/boost/intrusive/detail/any_node_and_algorithms.hpp
==============================================================================
--- sandbox/metagraph/boost/intrusive/detail/any_node_and_algorithms.hpp (original)
+++ sandbox/metagraph/boost/intrusive/detail/any_node_and_algorithms.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
@@ -18,6 +18,7 @@
#include <boost/intrusive/detail/assert.hpp>
#include <boost/intrusive/detail/pointer_to_other.hpp>
#include <cstddef>
+#include <boost/intrusive/detail/mpl.hpp>
namespace boost {
namespace intrusive {
@@ -238,6 +239,10 @@
template<class VoidPointer>
class any_algorithms
{
+ template <class T>
+ static void function_not_available_for_any_hooks(typename detail::enable_if<detail::is_same<T, bool> >::type)
+ {}
+
public:
typedef any_node<VoidPointer> node;
typedef typename boost::pointer_to_other
@@ -269,28 +274,18 @@
static bool unique(const_node_ptr node)
{ return 0 == node->node_ptr_1; }
-
-#if defined(__EDG__) && defined(__STD_STRICT_ANSI)
- // For compilers checking the full source code at compile time, regardless
- // of whether the code is instantiated or not, we turn the compile error
- // below into a link error.
- static void unlink(node_ptr);
- static void swap_nodes(node_ptr l, node_ptr r);
-#else
static void unlink(node_ptr)
{
- //Auto-unlink hooks and unlink() call for safe hooks are not
- //available for any hooks!!!
- any_algorithms<VoidPointer>::unlink_not_available_for_any_hooks();
+ //Auto-unlink hooks and unlink() are not available for any hooks
+ any_algorithms<VoidPointer>::template function_not_available_for_any_hooks<node_ptr>();
}
static void swap_nodes(node_ptr l, node_ptr r)
{
//Any nodes have no swap_nodes capability because they don't know
- //what algorithm they must use from unlink them from the container
- any_algorithms<VoidPointer>::swap_nodes_not_available_for_any_hooks();
+ //what algorithm they must use to unlink the node from the container
+ any_algorithms<VoidPointer>::template function_not_available_for_any_hooks<node_ptr>();
}
-#endif
};
} //namespace intrusive
Modified: sandbox/metagraph/boost/intrusive/detail/common_slist_algorithms.hpp
==============================================================================
--- sandbox/metagraph/boost/intrusive/detail/common_slist_algorithms.hpp (original)
+++ sandbox/metagraph/boost/intrusive/detail/common_slist_algorithms.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
@@ -76,7 +76,7 @@
static void transfer_after(node_ptr p, node_ptr b, node_ptr e)
{
- if (p != b && p != e) {
+ if (p != b && p != e && b != e) {
node_ptr next_b = NodeTraits::get_next(b);
node_ptr next_e = NodeTraits::get_next(e);
node_ptr next_p = NodeTraits::get_next(p);
Deleted: sandbox/metagraph/boost/intrusive/detail/parent_from_member.hpp
==============================================================================
--- sandbox/metagraph/boost/intrusive/detail/parent_from_member.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
+++ (empty file)
@@ -1,70 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-//
-// (C) Copyright Ion Gaztanaga 2007
-//
-// 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)
-//
-// See http://www.boost.org/libs/intrusive for documentation.
-//
-/////////////////////////////////////////////////////////////////////////////
-#ifndef BOOST_INTRUSIVE_PARENT_FROM_MEMBER_HPP
-#define BOOST_INTRUSIVE_PARENT_FROM_MEMBER_HPP
-
-#include <boost/intrusive/detail/config_begin.hpp>
-#include <cstddef>
-
-#if defined(BOOST_MSVC) || (defined (BOOST_WINDOWS) && defined(BOOST_INTEL))
-#define BOOST_INTRUSIVE_MSVC_COMPLIANT_PTR_TO_MEMBER
-#include <boost/cstdint.hpp>
-#endif
-
-namespace boost {
-namespace intrusive {
-namespace detail {
-
-template<class Parent, class Member>
-inline std::ptrdiff_t offset_from_pointer_to_member(const Member Parent::* ptr_to_member)
-{
- //The implementation of a pointer to member is compiler dependent.
- #if defined(BOOST_INTRUSIVE_MSVC_COMPLIANT_PTR_TO_MEMBER)
- //msvc compliant compilers use their the first 32 bits as offset (even in 64 bit mode)
- return *(const boost::int32_t*)(void*)&ptr_to_member;
- //This works with gcc, msvc, ac++, ibmcpp
- #elif defined(__GNUC__) || defined(__HP_aCC) || defined(BOOST_INTEL) || \
- defined(__IBMCPP__) || defined(__DECCXX)
- const Parent * const parent = 0;
- const char *const member = reinterpret_cast<const char*>(&(parent->*ptr_to_member));
- return std::ptrdiff_t(member - reinterpret_cast<const char*>(parent));
- #else
- //This is the traditional C-front approach: __MWERKS__, __DMC__, __SUNPRO_CC
- return (*(const std::ptrdiff_t*)(void*)&ptr_to_member) - 1;
- #endif
-}
-
-template<class Parent, class Member>
-inline Parent *parent_from_member(Member *member, const Member Parent::* ptr_to_member)
-{
- return (Parent*)((char*)member -
- offset_from_pointer_to_member(ptr_to_member));
-}
-
-template<class Parent, class Member>
-inline const Parent *parent_from_member(const Member *member, const Member Parent::* ptr_to_member)
-{
- return (const Parent*)((const char*)member -
- offset_from_pointer_to_member(ptr_to_member));
-}
-
-} //namespace detail {
-} //namespace intrusive {
-} //namespace boost {
-
-#ifdef BOOST_INTRUSIVE_MSVC_COMPLIANT_PTR_TO_MEMBER
-#undef BOOST_INTRUSIVE_MSVC_COMPLIANT_PTR_TO_MEMBER
-#endif
-
-#include <boost/intrusive/detail/config_end.hpp>
-
-#endif //#ifndef BOOST_INTRUSIVE_PARENT_FROM_MEMBER_HPP
Modified: sandbox/metagraph/boost/intrusive/detail/utilities.hpp
==============================================================================
--- sandbox/metagraph/boost/intrusive/detail/utilities.hpp (original)
+++ sandbox/metagraph/boost/intrusive/detail/utilities.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
@@ -15,7 +15,7 @@
#include <boost/intrusive/detail/config_begin.hpp>
#include <boost/intrusive/detail/pointer_to_other.hpp>
-#include <boost/intrusive/detail/parent_from_member.hpp>
+#include <boost/detail/parent_from_member.hpp>
#include <boost/intrusive/detail/ebo_functor_holder.hpp>
#include <boost/intrusive/link_mode.hpp>
#include <boost/intrusive/detail/mpl.hpp>
Modified: sandbox/metagraph/boost/intrusive/member_value_traits.hpp
==============================================================================
--- sandbox/metagraph/boost/intrusive/member_value_traits.hpp (original)
+++ sandbox/metagraph/boost/intrusive/member_value_traits.hpp 2008-08-25 13:42:28 EDT (Mon, 25 Aug 2008)
@@ -15,7 +15,7 @@
#include <boost/intrusive/link_mode.hpp>
#include <iterator>
-#include <boost/intrusive/detail/parent_from_member.hpp>
+#include <boost/detail/parent_from_member.hpp>
namespace boost {
namespace intrusive {
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk