Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r61018 - in trunk: boost/fusion/adapted/struct boost/fusion/adapted/struct/detail boost/fusion/include libs/fusion/doc libs/fusion/test libs/fusion/test/sequence
From: mr.chr.schmidt_at_[hidden]
Date: 2010-04-03 09:34:23


Author: cschmidt
Date: 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
New Revision: 61018
URL: http://svn.boost.org/trac/boost/changeset/61018

Log:
added intrusive struct generating macros
Added:
   trunk/boost/fusion/adapted/struct/define_assoc_struct.hpp (contents, props changed)
   trunk/boost/fusion/adapted/struct/define_struct.hpp (contents, props changed)
   trunk/boost/fusion/adapted/struct/detail/define_struct.hpp (contents, props changed)
   trunk/boost/fusion/adapted/struct/detail/namespace.hpp (contents, props changed)
   trunk/boost/fusion/include/define_assoc_struct.hpp (contents, props changed)
   trunk/boost/fusion/include/define_struct.hpp (contents, props changed)
   trunk/libs/fusion/test/sequence/define_assoc_struct.cpp (contents, props changed)
   trunk/libs/fusion/test/sequence/define_assoc_tpl_struct.cpp (contents, props changed)
   trunk/libs/fusion/test/sequence/define_struct.cpp (contents, props changed)
   trunk/libs/fusion/test/sequence/define_tpl_struct.cpp (contents, props changed)
Text files modified:
   trunk/boost/fusion/adapted/struct/detail/proxy_type.hpp | 41 ++++-----------------------------------
   trunk/libs/fusion/doc/adapted.qbk | 4 +-
   trunk/libs/fusion/test/Jamfile | 4 +++
   3 files changed, 11 insertions(+), 38 deletions(-)

Added: trunk/boost/fusion/adapted/struct/define_assoc_struct.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/adapted/struct/define_assoc_struct.hpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,41 @@
+/*=============================================================================
+ 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_STRUCT_DEFINE_ASSOC_STRUCT_HPP
+#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_ASSOC_STRUCT_HPP
+
+#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
+#include <boost/fusion/adapted/struct/detail/define_struct.hpp>
+
+#define BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT( \
+ TEMPLATE_PARAMS_SEQ, NAMESPACE_SEQ, NAME, ATTRIBUTES) \
+ \
+ BOOST_FUSION_DEFINE_TPL_STRUCT_IMPL( \
+ TEMPLATE_PARAMS_SEQ, \
+ (0)NAMESPACE_SEQ, \
+ NAME, \
+ BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0 ATTRIBUTES,_END), \
+ 3) \
+ \
+ BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT( \
+ TEMPLATE_PARAMS_SEQ, \
+ (BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ) NAME)\
+ TEMPLATE_PARAMS_SEQ, \
+ ATTRIBUTES)
+
+#define BOOST_FUSION_DEFINE_ASSOC_STRUCT(NAMESPACE_SEQ, NAME, ATTRIBUTES) \
+ BOOST_FUSION_DEFINE_STRUCT_IMPL( \
+ (0)NAMESPACE_SEQ, \
+ NAME, \
+ BOOST_PP_CAT(BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0 ATTRIBUTES,_END), \
+ 3) \
+ \
+ BOOST_FUSION_ADAPT_ASSOC_STRUCT( \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ) NAME, \
+ ATTRIBUTES)
+
+#endif

Added: trunk/boost/fusion/adapted/struct/define_struct.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/adapted/struct/define_struct.hpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,41 @@
+/*=============================================================================
+ 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_STRUCT_DEFINE_STRUCT_HPP
+#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_HPP
+
+#include <boost/fusion/adapted/struct/adapt_struct.hpp>
+#include <boost/fusion/adapted/struct/detail/define_struct.hpp>
+
+#define BOOST_FUSION_DEFINE_TPL_STRUCT( \
+ TEMPLATE_PARAMS_SEQ, NAMESPACE_SEQ, NAME, ATTRIBUTES) \
+ \
+ BOOST_FUSION_DEFINE_TPL_STRUCT_IMPL( \
+ TEMPLATE_PARAMS_SEQ, \
+ (0)NAMESPACE_SEQ, \
+ NAME, \
+ BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \
+ 2) \
+ \
+ BOOST_FUSION_ADAPT_TPL_STRUCT( \
+ TEMPLATE_PARAMS_SEQ, \
+ (BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ) NAME)\
+ TEMPLATE_PARAMS_SEQ, \
+ ATTRIBUTES)
+
+#define BOOST_FUSION_DEFINE_STRUCT(NAMESPACE_SEQ, NAME, ATTRIBUTES) \
+ BOOST_FUSION_DEFINE_STRUCT_IMPL( \
+ (0)NAMESPACE_SEQ, \
+ NAME, \
+ BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \
+ 2) \
+ \
+ BOOST_FUSION_ADAPT_STRUCT( \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ) NAME, \
+ ATTRIBUTES)
+
+#endif

Added: trunk/boost/fusion/adapted/struct/detail/define_struct.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/adapted/struct/detail/define_struct.hpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,308 @@
+/*=============================================================================
+ 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_DETAIL_STRUCT_DEFINE_STRUCT_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_DEFINE_STRUCT_HPP
+
+#include <boost/config.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/advance.hpp>
+#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
+#include <boost/fusion/adapted/struct/detail/namespace.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/if.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/logical/not.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+#include <boost/preprocessor/seq/enum.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/preprocessor/tuple/eat.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#define BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR_FILLER_I( \
+ R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
+ \
+ BOOST_PP_COMMA_IF(I) \
+ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)( \
+ other_self.BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE))
+
+#define BOOST_FUSION_DEFINE_STRUCT_ASSIGN_FILLER_I( \
+ R, ATTRIBUTE_TUPEL_SIZE, I_, ATTRIBUTE) \
+ \
+ BOOST_PP_IF( \
+ I_, \
+ typedef typename \
+ boost::fusion::result_of::next< \
+ BOOST_PP_CAT(I,BOOST_PP_DEC(I_)) \
+ >::type \
+ BOOST_PP_CAT(I,I_); \
+ BOOST_PP_CAT(I,I_) BOOST_PP_CAT(i,I_)= \
+ boost::fusion::next(BOOST_PP_CAT(i,BOOST_PP_DEC(I_)));, \
+ BOOST_PP_EMPTY() \
+ ) \
+ \
+ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)= \
+ boost::fusion::deref(BOOST_PP_CAT(i,I_));
+
+#define BOOST_FUSION_DEFINE_STRUCT_ASSIGN_OP( \
+ ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ template<typename Seq> \
+ self_type& \
+ operator=(Seq const& seq) \
+ { \
+ typedef typename \
+ boost::fusion::result_of::begin<Seq const>::type \
+ I0; \
+ I0 i0=boost::fusion::begin(seq); \
+ \
+ BOOST_PP_SEQ_FOR_EACH_I_R( \
+ 1, \
+ BOOST_FUSION_DEFINE_STRUCT_ASSIGN_FILLER_I, \
+ ATTRIBUTE_TUPEL_SIZE, \
+ ATTRIBUTES_SEQ) \
+ \
+ return *this; \
+ }
+
+#define BOOST_FUSION_DEFINE_STRUCT_ATTR_I(R, ATTRIBUTE_TUPEL_SIZE, ATTRIBUTE) \
+ \
+ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,0,ATTRIBUTE) \
+ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE);
+
+#define BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I( \
+ R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
+ \
+ BOOST_PP_COMMA_IF(I) \
+ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)( \
+ boost::fusion::deref(boost::fusion::advance_c<I>(boost::fusion::begin( \
+ seq))))
+
+#define BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_DISABLER( \
+ ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ , typename boost::disable_if< \
+ boost::is_convertible< \
+ Seq const& \
+ , BOOST_PP_TUPLE_ELEM( \
+ ATTRIBUTE_TUPEL_SIZE, \
+ 0, \
+ BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
+ > \
+ >::type* =0
+
+#define BOOST_FUSION_DEFINE_STRUCT_SEQ_DEFAULT_CTOR_FILLER_I( \
+ R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
+ \
+ BOOST_PP_COMMA_IF(I) \
+ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)()
+
+#define BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \
+ NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ BOOST_PP_SEQ_FOR_EACH_R( \
+ 1, \
+ BOOST_FUSION_DEFINE_STRUCT_ATTR_I, \
+ ATTRIBUTE_TUPEL_SIZE, \
+ ATTRIBUTES_SEQ) \
+ \
+ NAME() \
+ : BOOST_PP_SEQ_FOR_EACH_I_R( \
+ 1, \
+ BOOST_FUSION_DEFINE_STRUCT_SEQ_DEFAULT_CTOR_FILLER_I, \
+ ATTRIBUTE_TUPEL_SIZE, \
+ ATTRIBUTES_SEQ) \
+ {} \
+ \
+ NAME(self_type const& other_self) \
+ : BOOST_PP_SEQ_FOR_EACH_I_R( \
+ 1, \
+ BOOST_FUSION_DEFINE_STRUCT_COPY_CTOR_FILLER_I, \
+ ATTRIBUTE_TUPEL_SIZE, \
+ ATTRIBUTES_SEQ) \
+ {} \
+ \
+ template<typename Seq> \
+ NAME(Seq const& seq \
+ BOOST_PP_IF( \
+ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
+ BOOST_PP_TUPLE_EAT(2), \
+ BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_DISABLER)( \
+ ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ ) \
+ : BOOST_PP_SEQ_FOR_EACH_I_R( \
+ 1, \
+ BOOST_FUSION_DEFINE_STRUCT_SEQ_CTOR_FILLER_I, \
+ ATTRIBUTE_TUPEL_SIZE, \
+ ATTRIBUTES_SEQ) \
+ {} \
+ \
+ BOOST_FUSION_DEFINE_STRUCT_ASSIGN_OP(ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE)
+
+#define BOOST_FUSION_DEFINE_STRUCT_CTOR_1( \
+ NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ explicit \
+ NAME(boost::call_traits< \
+ BOOST_PP_TUPLE_ELEM( \
+ ATTRIBUTE_TUPEL_SIZE,0,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
+ >::param_type arg) \
+ : BOOST_PP_TUPLE_ELEM( \
+ ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg) \
+ {}
+
+#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1( \
+ TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ explicit \
+ NAME(typename boost::call_traits< \
+ typename boost::fusion::detail::get_first_arg< \
+ BOOST_PP_TUPLE_ELEM( \
+ ATTRIBUTE_TUPEL_SIZE, \
+ 0, \
+ BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ)) \
+ , BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ) \
+ >::type \
+ >::param_type arg) \
+ : BOOST_PP_TUPLE_ELEM( \
+ ATTRIBUTE_TUPEL_SIZE,1,BOOST_PP_SEQ_HEAD(ATTRIBUTES_SEQ))(arg) \
+ {}
+
+#define BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I( \
+ R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
+ \
+ BOOST_PP_COMMA_IF(I) \
+ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,1,ATTRIBUTE)(BOOST_PP_CAT(_,I))
+
+#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I(R, DATA, I, ATTRIBUTE) \
+ \
+ BOOST_PP_COMMA_IF(I) \
+ typename boost::call_traits< \
+ typename boost::fusion::detail::get_first_arg< \
+ BOOST_PP_TUPLE_ELEM( \
+ BOOST_PP_TUPLE_ELEM(3,0,DATA), \
+ 0, \
+ ATTRIBUTE) \
+ , BOOST_PP_TUPLE_ELEM(3,2,DATA) \
+ >::type \
+ >::param_type BOOST_PP_CAT(_,I)
+
+#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N( \
+ TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
+ 1, \
+ BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_ARG_I, \
+ ( \
+ ATTRIBUTE_TUPEL_SIZE, \
+ BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \
+ BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ) \
+ ), \
+ ATTRIBUTES_SEQ)) \
+ : BOOST_PP_SEQ_FOR_EACH_I_R( \
+ 1, \
+ BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I, \
+ ATTRIBUTE_TUPEL_SIZE, \
+ ATTRIBUTES_SEQ) \
+ {}
+
+#define BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I( \
+ R, ATTRIBUTE_TUPEL_SIZE, I, ATTRIBUTE) \
+ \
+ BOOST_PP_COMMA_IF(I) \
+ boost::call_traits< \
+ BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE,0,ATTRIBUTE) \
+ >::param_type BOOST_PP_CAT(_,I)
+
+#define BOOST_FUSION_DEFINE_STRUCT_CTOR_N( \
+ NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ NAME(BOOST_PP_SEQ_FOR_EACH_I_R( \
+ 1, \
+ BOOST_FUSION_DEFINE_STRUCT_CTOR_ARG_I, \
+ ATTRIBUTE_TUPEL_SIZE, \
+ ATTRIBUTES_SEQ)) \
+ : BOOST_PP_SEQ_FOR_EACH_I_R( \
+ 1, \
+ BOOST_FUSION_DEFINE_STRUCT_CTOR_FILLER_I, \
+ ATTRIBUTE_TUPEL_SIZE, \
+ ATTRIBUTES_SEQ) \
+ {}
+
+#define BOOST_FUSION_DEFINE_STRUCT_CTOR(ATTRIBUTES_SEQ) \
+ BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
+ BOOST_FUSION_DEFINE_STRUCT_CTOR_N, \
+ BOOST_FUSION_DEFINE_STRUCT_CTOR_1)
+
+#define BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR(ATTRIBUTES_SEQ) \
+ BOOST_PP_IF(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)), \
+ BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_N, \
+ BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR_1)
+
+#define BOOST_FUSION_DEFINE_STRUCT_IMPL( \
+ NAMESPACE_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \
+ \
+ struct NAME \
+ { \
+ typedef NAME self_type; \
+ \
+ BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \
+ NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ BOOST_FUSION_DEFINE_STRUCT_CTOR(ATTRIBUTES_SEQ)( \
+ NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ }; \
+ \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
+
+#define BOOST_FUSION_DEFINE_TPL_STRUCT_IMPL( \
+ TEMPLATE_PARAMS_SEQ, \
+ NAMESPACE_SEQ, \
+ NAME, \
+ ATTRIBUTES_SEQ, \
+ ATTRIBUTE_TUPEL_SIZE) \
+ \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \
+ \
+ template< \
+ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL( \
+ (0)TEMPLATE_PARAMS_SEQ) \
+ > \
+ struct NAME \
+ { \
+ typedef NAME self_type; \
+ \
+ BOOST_FUSION_DEFINE_STRUCT_IMPL_IMPL( \
+ NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ \
+ BOOST_FUSION_DEFINE_TPL_STRUCT_CTOR(ATTRIBUTES_SEQ)( \
+ TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES_SEQ, ATTRIBUTE_TUPEL_SIZE) \
+ }; \
+ \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
+
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename A1, typename A2>
+ struct get_first_arg
+ {
+ typedef A1 type;
+ };
+}}}
+
+#endif

Added: trunk/boost/fusion/adapted/struct/detail/namespace.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/adapted/struct/detail/namespace.hpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,51 @@
+/*=============================================================================
+ 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_DETAIL_STRUCT_NAMESPACE_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_NAMESPACE_HPP
+
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/tuple/eat.hpp>
+
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_BEGIN_I(R,DATA,ELEM) \
+ namespace ELEM {
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_END_I(Z,I,DATA) }
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I(Z,I,ELEM) ELEM::
+
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \
+ BOOST_PP_IF( \
+ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)), \
+ BOOST_PP_SEQ_FOR_EACH_R, \
+ BOOST_PP_TUPLE_EAT(4))( \
+ 1, \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_BEGIN_I, \
+ _, \
+ BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ))
+
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ) \
+ BOOST_PP_REPEAT_1( \
+ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)), \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_END_I, \
+ _)
+
+#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION(NAMESPACE_SEQ) \
+ BOOST_PP_IF( \
+ BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)), \
+ BOOST_PP_SEQ_FOR_EACH_R, \
+ BOOST_PP_TUPLE_EAT(4))( \
+ 1, \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I, \
+ _, \
+ BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ))
+
+#endif

Modified: trunk/boost/fusion/adapted/struct/detail/proxy_type.hpp
==============================================================================
--- trunk/boost/fusion/adapted/struct/detail/proxy_type.hpp (original)
+++ trunk/boost/fusion/adapted/struct/detail/proxy_type.hpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -6,33 +6,15 @@
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 ==============================================================================*/
 
-#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_PROXY_TYPE_HPP
-#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_PROXY_TYPE_HPP
+#ifndef BOOST_FUSION_ADAPTED_DETAIL_STRUCT_PROXY_TYPE_HPP
+#define BOOST_FUSION_ADAPTED_DETAIL_STRUCT_PROXY_TYPE_HPP
 
-#include <boost/preprocessor/dec.hpp>
-#include <boost/preprocessor/control/if.hpp>
-#include <boost/preprocessor/seq/seq.hpp>
-#include <boost/preprocessor/seq/for_each.hpp>
-#include <boost/preprocessor/seq/size.hpp>
-#include <boost/preprocessor/repetition/repeat.hpp>
-
-#define BOOST_FUSION_ADAPT_STRUCT_PROXY_DUMMY4(A,B,C,D)
-#define BOOST_FUSION_ADAPT_STRUCT_PROXY_TYPE_NS_BEGIN(R,DATA,ELEM) \
- namespace ELEM {
-#define BOOST_FUSION_ADAPT_STRUCT_PROXY_TYPE_NS_END(Z,I,DATA) }
-#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I(Z,I,ELEM) ELEM::
+#include <boost/fusion/adapted/struct/detail/namespace.hpp>
 
 #define BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE( \
     WRAPPED_TYPE,NAMESPACE_SEQ,NAME) \
                                                                                 \
- BOOST_PP_IF( \
- BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)), \
- BOOST_PP_SEQ_FOR_EACH_R, \
- BOOST_FUSION_ADAPT_STRUCT_PROXY_DUMMY4)( \
- 1, \
- BOOST_FUSION_ADAPT_STRUCT_PROXY_TYPE_NS_BEGIN, \
- _, \
- BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ)) \
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_BEGIN(NAMESPACE_SEQ) \
                                                                                 \
     struct NAME \
     { \
@@ -43,19 +25,6 @@
         WRAPPED_TYPE& obj; \
     }; \
                                                                                 \
- BOOST_PP_REPEAT_1( \
- BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)), \
- BOOST_FUSION_ADAPT_STRUCT_PROXY_TYPE_NS_END, \
- _)
-
-#define BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION(NAMESPACE_SEQ) \
- BOOST_PP_IF( \
- BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(NAMESPACE_SEQ)), \
- BOOST_PP_SEQ_FOR_EACH_R, \
- BOOST_FUSION_ADAPT_STRUCT_PROXY_DUMMY4)( \
- 1, \
- BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION_I, \
- _, \
- BOOST_PP_SEQ_TAIL(NAMESPACE_SEQ))
+ BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DEFINITION_END(NAMESPACE_SEQ)
 
 #endif

Added: trunk/boost/fusion/include/define_assoc_struct.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/include/define_assoc_struct.hpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,13 @@
+/*=============================================================================
+ 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_INCLUDE_DEFINE_ASSOC_STRUCT_HPP
+#define BOOST_FUSION_INCLUDE_DEFINE_ASSOC_STRUCT_HPP
+
+#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
+
+#endif

Added: trunk/boost/fusion/include/define_struct.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/fusion/include/define_struct.hpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,13 @@
+/*=============================================================================
+ 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_INCLUDE_DEFINE_STRUCT_HPP
+#define BOOST_FUSION_INCLUDE_DEFINE_STRUCT_HPP
+
+#include <boost/fusion/adapted/struct/define_struct.hpp>
+
+#endif

Modified: trunk/libs/fusion/doc/adapted.qbk
==============================================================================
--- trunk/libs/fusion/doc/adapted.qbk (original)
+++ trunk/libs/fusion/doc/adapted.qbk 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -101,8 +101,8 @@
 
 [heading Header]
 
- #include <boost/fusion/adapted/array.hpp>
- #include <boost/fusion/include/array.hpp>
+ #include <boost/fusion/adapted/boost_array.hpp>
+ #include <boost/fusion/include/boost_array.hpp>
 
 [heading Model of]
 

Modified: trunk/libs/fusion/test/Jamfile
==============================================================================
--- trunk/libs/fusion/test/Jamfile (original)
+++ trunk/libs/fusion/test/Jamfile 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -120,6 +120,10 @@
     [ run sequence/adapt_struct.cpp : : : : ]
     [ run sequence/adapt_tpl_class.cpp : : : : ]
     [ run sequence/adapt_tpl_struct.cpp : : : : ]
+ [ run sequence/define_struct.cpp : : : : ]
+ [ run sequence/define_assoc_struct.cpp : : : : ]
+ [ run sequence/define_tpl_struct.cpp : : : : ]
+ [ run sequence/define_assoc_tpl_struct.cpp : : : : ]
     
     [ run functional/fused.cpp : : : : ]
     [ run functional/fused_function_object.cpp : : : : ]

Added: trunk/libs/fusion/test/sequence/define_assoc_struct.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/fusion/test/sequence/define_assoc_struct.cpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,114 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/fusion/sequence.hpp>
+#include <boost/fusion/container.hpp>
+#include <boost/fusion/support.hpp>
+#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <iostream>
+
+namespace ns
+{
+ struct x_member;
+ struct y_member;
+ struct z_member;
+}
+
+BOOST_FUSION_DEFINE_ASSOC_STRUCT(
+ (ns),
+ point,
+ (int, x, ns::x_member)
+ (int, y, ns::y_member)
+)
+
+int
+main()
+{
+ using namespace boost::fusion;
+
+ std::cout << tuple_open('[');
+ std::cout << tuple_close(']');
+ std::cout << tuple_delimiter(", ");
+
+ {
+ BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
+ ns::point p(123, 456);
+
+ std::cout << at_c<0>(p) << std::endl;
+ std::cout << at_c<1>(p) << std::endl;
+ std::cout << p << std::endl;
+ BOOST_TEST(p == make_vector(123, 456));
+
+ at_c<0>(p) = 6;
+ at_c<1>(p) = 9;
+ BOOST_TEST(p == make_vector(6, 9));
+
+ BOOST_STATIC_ASSERT(result_of::size<ns::point>::value == 2);
+ BOOST_STATIC_ASSERT(!result_of::empty<ns::point>::value);
+
+ BOOST_TEST(front(p) == 6);
+ BOOST_TEST(back(p) == 9);
+ }
+
+ {
+ vector<int, float> v1(4, 2);
+ ns::point v2(5, 3);
+ vector<long, double> v3(5, 4);
+ BOOST_TEST(v1 < v2);
+ BOOST_TEST(v1 <= v2);
+ BOOST_TEST(v2 > v1);
+ BOOST_TEST(v2 >= v1);
+ BOOST_TEST(v2 < v3);
+ BOOST_TEST(v2 <= v3);
+ BOOST_TEST(v3 > v2);
+ BOOST_TEST(v3 >= v2);
+ }
+
+ {
+ // conversion from ns::point to vector
+ ns::point p(5, 3);
+ vector<int, short> v(p);
+ v = p;
+ }
+
+ {
+ // conversion from ns::point to list
+ ns::point p(5, 3);
+ list<int, short> l(p);
+ l = p;
+ }
+
+ {
+ // assoc stuff
+ BOOST_MPL_ASSERT((result_of::has_key<ns::point, ns::x_member>));
+ BOOST_MPL_ASSERT((result_of::has_key<ns::point, ns::y_member>));
+ BOOST_MPL_ASSERT((boost::mpl::not_<result_of::has_key<ns::point, ns::z_member> >));
+
+ BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_key<ns::point, ns::x_member>::type, int>));
+ BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_key<ns::point, ns::y_member>::type, int>));
+
+ ns::point p(5, 3);
+
+ BOOST_TEST(at_key<ns::x_member>(p) == 5);
+ BOOST_TEST(at_key<ns::y_member>(p) == 3);
+ }
+
+ {
+ ns::point p = make_list(5,3);
+ BOOST_TEST(p == make_vector(5,3));
+
+ p = make_list(3,5);
+ BOOST_TEST(p == make_vector(3,5));
+ }
+
+ return boost::report_errors();
+}
+

Added: trunk/libs/fusion/test/sequence/define_assoc_tpl_struct.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/fusion/test/sequence/define_assoc_tpl_struct.cpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,118 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/fusion/sequence.hpp>
+#include <boost/fusion/container.hpp>
+#include <boost/fusion/support.hpp>
+#include <boost/fusion/sequence/io/out.hpp>
+#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <iostream>
+#include <string>
+
+namespace ns
+{
+ struct x_member;
+ struct y_member;
+ struct z_member;
+}
+
+BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT(
+ (X)(Y),
+ (ns),
+ point,
+ (int, x, ns::x_member)
+ (int, y, ns::y_member)
+)
+
+int
+main()
+{
+ using namespace boost::fusion;
+
+ typedef ns::point<int,int> point;
+
+ std::cout << tuple_open('[');
+ std::cout << tuple_close(']');
+ std::cout << tuple_delimiter(", ");
+
+ {
+ BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
+ point p(123, 456);
+
+ std::cout << at_c<0>(p) << std::endl;
+ std::cout << at_c<1>(p) << std::endl;
+ std::cout << p << std::endl;
+ BOOST_TEST(p == make_vector(123, 456));
+
+ at_c<0>(p) = 6;
+ at_c<1>(p) = 9;
+ BOOST_TEST(p == make_vector(6, 9));
+
+ BOOST_STATIC_ASSERT(result_of::size<point>::value == 2);
+ BOOST_STATIC_ASSERT(!result_of::empty<point>::value);
+
+ BOOST_TEST(front(p) == 6);
+ BOOST_TEST(back(p) == 9);
+ }
+
+ {
+ vector<int, float> v1(4, 2);
+ point v2(5, 3);
+ vector<long, double> v3(5, 4);
+ BOOST_TEST(v1 < v2);
+ BOOST_TEST(v1 <= v2);
+ BOOST_TEST(v2 > v1);
+ BOOST_TEST(v2 >= v1);
+ BOOST_TEST(v2 < v3);
+ BOOST_TEST(v2 <= v3);
+ BOOST_TEST(v3 > v2);
+ BOOST_TEST(v3 >= v2);
+ }
+
+ {
+ // conversion from point to vector
+ point p(5, 3);
+ vector<int, short> v(p);
+ v = p;
+ }
+
+ {
+ // conversion from point to list
+ point p(5, 3);
+ list<int, short> l(p);
+ l = p;
+ }
+
+ {
+ // assoc stuff
+ BOOST_MPL_ASSERT((result_of::has_key<point, ns::x_member>));
+ BOOST_MPL_ASSERT((result_of::has_key<point, ns::y_member>));
+ BOOST_MPL_ASSERT((boost::mpl::not_<result_of::has_key<point, ns::z_member> >));
+
+ BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_key<point, ns::x_member>::type, int>));
+ BOOST_MPL_ASSERT((boost::is_same<result_of::value_at_key<point, ns::y_member>::type, int>));
+
+ point p(5, 3);
+
+ BOOST_TEST(at_key<ns::x_member>(p) == 5);
+ BOOST_TEST(at_key<ns::y_member>(p) == 3);
+ }
+
+ {
+ point p = make_list(5,3);
+ BOOST_TEST(p == make_vector(5,3));
+
+ p = make_list(3,5);
+ BOOST_TEST(p == make_vector(3,5));
+ }
+
+ return boost::report_errors();
+}
+

Added: trunk/libs/fusion/test/sequence/define_struct.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/fusion/test/sequence/define_struct.cpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,105 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/fusion/sequence.hpp>
+#include <boost/fusion/container.hpp>
+#include <boost/fusion/support.hpp>
+#include <boost/fusion/sequence/io/out.hpp>
+#include <boost/fusion/adapted/struct/define_struct.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <iostream>
+#include <string>
+
+BOOST_FUSION_DEFINE_STRUCT(
+ (ns),
+ point,
+ (int, x)
+ (int, y)
+)
+
+BOOST_FUSION_DEFINE_STRUCT(BOOST_PP_EMPTY(), s, (int, m))
+
+int
+main()
+{
+ using namespace boost::fusion;
+
+ std::cout << tuple_open('[');
+ std::cout << tuple_close(']');
+ std::cout << tuple_delimiter(", ");
+
+ {
+ BOOST_MPL_ASSERT_NOT((traits::is_view<ns::point>));
+ ns::point p(123, 456);
+
+ std::cout << at_c<0>(p) << std::endl;
+ std::cout << at_c<1>(p) << std::endl;
+ std::cout << p << std::endl;
+ BOOST_TEST(p == make_vector(123, 456));
+
+ at_c<0>(p) = 6;
+ at_c<1>(p) = 9;
+ BOOST_TEST(p == make_vector(6, 9));
+
+ BOOST_STATIC_ASSERT(result_of::size<ns::point>::value == 2);
+ BOOST_STATIC_ASSERT(!result_of::empty<ns::point>::value);
+
+ BOOST_TEST(front(p) == 6);
+ BOOST_TEST(back(p) == 9);
+ }
+
+ {
+ vector<int, float> v1(4, 2);
+ ns::point v2(5, 3);
+ vector<long, double> v3(5, 4);
+ BOOST_TEST(v1 < v2);
+ BOOST_TEST(v1 <= v2);
+ BOOST_TEST(v2 > v1);
+ BOOST_TEST(v2 >= v1);
+ BOOST_TEST(v2 < v3);
+ BOOST_TEST(v2 <= v3);
+ BOOST_TEST(v3 > v2);
+ BOOST_TEST(v3 >= v2);
+ }
+
+ {
+ // conversion from ns::point to vector
+ ns::point p(5, 3);
+ vector<int, short> v(p);
+ v = p;
+ }
+
+ {
+ // conversion from ns::point to list
+ ns::point p(5, 3);
+ list<int, short> l(p);
+ l = p;
+ }
+
+ { // begin/end
+ using namespace boost::fusion;
+
+ typedef result_of::begin<s>::type b;
+ typedef result_of::end<s>::type e;
+ // this fails
+ BOOST_MPL_ASSERT((boost::is_same<result_of::next<b>::type, e>));
+ }
+
+ {
+ ns::point p = make_list(5,3);
+ BOOST_TEST(p == make_vector(5,3));
+
+ p = make_list(3,5);
+ BOOST_TEST(p == make_vector(3,5));
+ }
+
+ return boost::report_errors();
+}
+

Added: trunk/libs/fusion/test/sequence/define_tpl_struct.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/fusion/test/sequence/define_tpl_struct.cpp 2010-04-03 09:34:20 EDT (Sat, 03 Apr 2010)
@@ -0,0 +1,109 @@
+/*=============================================================================
+ 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)
+==============================================================================*/
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/fusion/sequence.hpp>
+#include <boost/fusion/container.hpp>
+#include <boost/fusion/support.hpp>
+#include <boost/fusion/sequence/io/out.hpp>
+#include <boost/fusion/adapted/struct/define_struct.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <iostream>
+#include <string>
+
+BOOST_FUSION_DEFINE_TPL_STRUCT(
+ (X)(Y),
+ (ns),
+ point,
+ (X, x)
+ (Y, y)
+)
+
+BOOST_FUSION_DEFINE_TPL_STRUCT((M), BOOST_PP_EMPTY(), s, (M, m))
+
+int
+main()
+{
+ using namespace boost::fusion;
+
+ typedef ns::point<int, int> point;
+
+ std::cout << tuple_open('[');
+ std::cout << tuple_close(']');
+ std::cout << tuple_delimiter(", ");
+
+ {
+ BOOST_MPL_ASSERT_NOT((traits::is_view<point>));
+ point p(123, 456);
+
+ std::cout << at_c<0>(p) << std::endl;
+ std::cout << at_c<1>(p) << std::endl;
+ std::cout << p << std::endl;
+ BOOST_TEST(p == make_vector(123, 456));
+
+ at_c<0>(p) = 6;
+ at_c<1>(p) = 9;
+ BOOST_TEST(p == make_vector(6, 9));
+
+ BOOST_STATIC_ASSERT(result_of::size<point>::value == 2);
+ BOOST_STATIC_ASSERT(!result_of::empty<point>::value);
+
+ BOOST_TEST(front(p) == 6);
+ BOOST_TEST(back(p) == 9);
+ }
+
+ {
+ vector<int, float> v1(4, 2);
+ point v2(5, 3);
+ vector<long, double> v3(5, 4);
+ BOOST_TEST(v1 < v2);
+ BOOST_TEST(v1 <= v2);
+ BOOST_TEST(v2 > v1);
+ BOOST_TEST(v2 >= v1);
+ BOOST_TEST(v2 < v3);
+ BOOST_TEST(v2 <= v3);
+ BOOST_TEST(v3 > v2);
+ BOOST_TEST(v3 >= v2);
+ }
+
+ {
+ // conversion from point to vector
+ point p(5, 3);
+ vector<int, short> v(p);
+ v = p;
+ }
+
+ {
+ // conversion from point to list
+ point p(5, 3);
+ list<int, short> l(p);
+ l = p;
+ }
+
+ { // begin/end
+ using namespace boost::fusion;
+
+ typedef result_of::begin<s<int> >::type b;
+ typedef result_of::end<s<int> >::type e;
+ // this fails
+ BOOST_MPL_ASSERT((boost::is_same<result_of::next<b>::type, e>));
+ }
+
+
+ {
+ point p = make_list(5,3);
+ BOOST_TEST(p == make_vector(5,3));
+
+ p = make_list(3,5);
+ BOOST_TEST(p == make_vector(3,5));
+ }
+
+ return boost::report_errors();
+}
+


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