Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r51443 - in sandbox/mirror: boost/mirror boost/mirror/detail boost/mirror/intrinsic boost/mirror/iterator/detail libs/mirror/test
From: chochlik_at_[hidden]
Date: 2009-02-25 12:58:32


Author: matus.chochlik
Date: 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
New Revision: 51443
URL: http://svn.boost.org/trac/boost/changeset/51443

Log:
[mirror 0.3.x]
- added filtered_global_list
- changed the meta_namespace::members to a meta-function
- updated the intrinsig algorithms to work with filtered_global_lists
- added a new test into the testsuite

Added:
   sandbox/mirror/libs/mirror/test/classes_ct_09.cpp (contents, props changed)
Text files modified:
   sandbox/mirror/boost/mirror/detail/global_list.hpp | 44 +++++++++++++++++++++++++++++++---
   sandbox/mirror/boost/mirror/detail/meta_type_registering.hpp | 32 +++++++++++++++++++++---
   sandbox/mirror/boost/mirror/intrinsic/at.hpp | 6 ++--
   sandbox/mirror/boost/mirror/intrinsic/empty.hpp | 11 ++++---
   sandbox/mirror/boost/mirror/intrinsic/size.hpp | 11 ++++---
   sandbox/mirror/boost/mirror/iterator/detail/global_list_iterator.hpp | 5 ++-
   sandbox/mirror/boost/mirror/meta_namespace.hpp | 33 ++++++++++++++++++++-----
   sandbox/mirror/libs/mirror/test/Jamfile.v2 | 1
   sandbox/mirror/libs/mirror/test/namespaces_ct_05.cpp | 51 +++++++++++++++++++++------------------
   9 files changed, 141 insertions(+), 53 deletions(-)

Modified: sandbox/mirror/boost/mirror/detail/global_list.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/detail/global_list.hpp (original)
+++ sandbox/mirror/boost/mirror/detail/global_list.hpp 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -11,6 +11,10 @@
 
 #include <boost/mirror/detail/counter.hpp>
 
+#include <boost/mpl/remove_if.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/not.hpp>
 
 namespace boost {
 namespace mirror {
@@ -25,20 +29,53 @@
         typedef ::boost::mpl::vector0<> type;
 };
 
+template <class Selector, class Counter, class UnaryPredicate>
+struct filtered_global_list
+{
+ typedef typename ::boost::mpl::remove_if<
+ typename global_list<
+ Selector,
+ Counter
+ >::type,
+ mpl::not_<
+ mpl::apply1<
+ UnaryPredicate,
+ mpl::_1
+ >
+ >
+ >::type type;
+};
+
 } // namespace counter
 
+
+
 #define BOOST_MIRROR_REGISTER_GLOBAL_LIST_SELECTOR(FULLY_QUALIFIED_TYPE) \
         BOOST_MIRROR_REGISTER_COUNTER_SELECTOR(FULLY_QUALIFIED_TYPE)
 
-
 #define BOOST_MIRROR_GET_GLOBAL_LIST_BASE_WRAPPER(SELECTOR, LUID, TYPENAME_KW) \
- TYPENAME_KW ::boost::mirror::counter::global_list< \
+ TYPENAME_KW ::boost::mirror::counter::global_list< \
+ ::boost::mirror::counter::selector< SELECTOR>, \
+ BOOST_MIRROR_COUNTER_PREVIOUS_COUNT_BASE( \
+ SELECTOR, \
+ LUID, \
+ TYPENAME_KW \
+ ) \
+ >
+
+#define BOOST_MIRROR_GET_FILTERED_GLOBAL_LIST_BASE_WRAPPER( \
+ SELECTOR, \
+ LUID, \
+ TYPENAME_KW, \
+ FILTER \
+) TYPENAME_KW ::boost::mirror::counter::filtered_global_list< \
                         ::boost::mirror::counter::selector< SELECTOR>, \
                         BOOST_MIRROR_COUNTER_PREVIOUS_COUNT_BASE( \
                                 SELECTOR, \
                                 LUID, \
                                 TYPENAME_KW \
- ) \
+ ), \
+ FILTER \
>
 
 #define BOOST_MIRROR_GET_GLOBAL_LIST_BASE(SELECTOR, LUID, TYPENAME_KW) \
@@ -95,7 +132,6 @@
 
 #endif // BOOST_MIRROR_COUNTER_UNRELIABLE
 
-
 } // namespace mirror
 } // namespace boost
 

Modified: sandbox/mirror/boost/mirror/detail/meta_type_registering.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/detail/meta_type_registering.hpp (original)
+++ sandbox/mirror/boost/mirror/detail/meta_type_registering.hpp 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -89,7 +89,12 @@
                 typedef BASE_NAME reflected_type; \
                 BOOST_MIRROR_REG_TYPE_DECLARE_BASE_NAME_HELPER(BASE_NAME) \
         }; \
- } // namespace detail
+ } /* namespace detail */ \
+ BOOST_MIRROR_ADD_TO_GLOBAL_LIST( \
+ BOOST_MIRRORED_GLOBAL_SCOPE()::_placeholder, \
+ meta_type< BASE_NAME > \
+ )
+
 
 /** 'Shorthand' for BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE macro
  */
@@ -107,7 +112,11 @@
                 typedef NAMESPACE::BASE_NAME reflected_type; \
                 BOOST_MIRROR_REG_TYPE_DECLARE_BASE_NAME_HELPER(BASE_NAME) \
         }; \
- } // namespace detail
+ } /* namespace detail */ \
+ BOOST_MIRROR_ADD_TO_GLOBAL_LIST( \
+ BOOST_MIRRORED_NAMESPACE(NAMESPACE)::_placeholder, \
+ meta_type< NAMESPACE::BASE_NAME > \
+ )
 
 
 /** All typedefined types are registered in this namespace
@@ -181,7 +190,14 @@
                 typedef ::TYPEDEFD_NAME reflected_type; \
                 BOOST_MIRROR_REG_TYPE_DECLARE_BASE_NAME_HELPER(TYPEDEFD_NAME) \
         }; \
- } // namespace detail
+ } /* namespace detail */ \
+ BOOST_MIRROR_ADD_TO_GLOBAL_LIST( \
+ BOOST_MIRRORED_GLOBAL_SCOPE()::_placeholder, \
+ meta_type< BOOST_MIRROR_GET_TYPEDEFD_TYPE_SELECTOR_GS( \
+ TYPEDEFD_NAME \
+ ) > \
+ )
+
 
 #define BOOST_MIRROR_REG_TYPEDEF_GS(TYPEDEFD_NAME) \
         BOOST_MIRROR_REG_TYPEDEF_GLOBAL_SCOPE(TYPEDEFD_NAME)
@@ -207,7 +223,15 @@
                 typedef NAMESPACE::TYPEDEFD_NAME reflected_type; \
                 BOOST_MIRROR_REG_TYPE_DECLARE_BASE_NAME_HELPER(TYPEDEFD_NAME) \
         }; \
- } // namespace detail
+ } /* namespace detail */ \
+ BOOST_MIRROR_ADD_TO_GLOBAL_LIST( \
+ BOOST_MIRRORED_NAMESPACE(NAMESPACE)::_placeholder, \
+ meta_type< BOOST_MIRROR_GET_TYPEDEFD_TYPE_SELECTOR( \
+ NAMESPACE, \
+ TYPEDEFD_NAME \
+ ) > \
+ )
+
 
 /** Declaration of meta types for types in declared inside
  * of a class.

Modified: sandbox/mirror/boost/mirror/intrinsic/at.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/intrinsic/at.hpp (original)
+++ sandbox/mirror/boost/mirror/intrinsic/at.hpp 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -60,10 +60,10 @@
         /** Specialization of at_impl<MetaObjectSequence>
          * for global_list<>
          */
- template <class Selector, class Counter, class Position>
- struct at_impl<counter::global_list<Selector, Counter>, Position >
+ template <class Selector, class Counter, class Filter, class Position>
+ struct at_impl<counter::filtered_global_list<Selector, Counter, Filter>, Position >
         : mpl::at<
- typename counter::global_list<Selector, Counter>::type,
+ typename counter::filtered_global_list<Selector, Counter, Filter>::type,
                 Position
>{ };
 

Modified: sandbox/mirror/boost/mirror/intrinsic/empty.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/intrinsic/empty.hpp (original)
+++ sandbox/mirror/boost/mirror/intrinsic/empty.hpp 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -64,13 +64,14 @@
         /** Specialization of empty_impl<MetaObjectSequence>
          * for global_list<>
          */
- template <class Selector, class Counter>
- struct empty_impl<counter::global_list<Selector, Counter> >
+ template <class Selector, class Counter, class Filter>
+ struct empty_impl<counter::filtered_global_list<Selector, Counter, Filter> >
         : mpl::empty<
- typename counter::global_list<
+ typename counter::filtered_global_list<
                                 Selector,
- Counter
- >::type_list
+ Counter,
+ Filter
+ >::type
>{ };
 
 } // namespace detail

Modified: sandbox/mirror/boost/mirror/intrinsic/size.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/intrinsic/size.hpp (original)
+++ sandbox/mirror/boost/mirror/intrinsic/size.hpp 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -63,14 +63,15 @@
>{ };
 
         /** Specialization of size_impl<MetaObjectSequence>
- * for counter::global_list
+ * for counter::filtered_global_list
          */
- template <class Selector, class Counter>
- struct size_impl<counter::global_list<Selector, Counter> >
+ template <class Selector, class Counter, class Filter>
+ struct size_impl<counter::filtered_global_list<Selector, Counter, Filter> >
         : mpl::size<
- typename counter::global_list<
+ typename counter::filtered_global_list<
                                 Selector,
- Counter
+ Counter,
+ Filter
>::type
>{ };
 

Modified: sandbox/mirror/boost/mirror/iterator/detail/global_list_iterator.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/iterator/detail/global_list_iterator.hpp (original)
+++ sandbox/mirror/boost/mirror/iterator/detail/global_list_iterator.hpp 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -24,10 +24,11 @@
          */
         template <
                 class Selector,
- class Counter
+ class Counter,
+ class Filter
>
         struct iterator_pointee_selector<
- counter::global_list<Selector, Counter>
+ counter::filtered_global_list<Selector, Counter, Filter>
>
         {
                 template <

Modified: sandbox/mirror/boost/mirror/meta_namespace.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/meta_namespace.hpp (original)
+++ sandbox/mirror/boost/mirror/meta_namespace.hpp 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -23,6 +23,7 @@
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/vector.hpp>
 #include <boost/mpl/push_back.hpp>
+#include <boost/mpl/always.hpp>
 
 // forward declarations and common mirror defs
 #include <boost/mirror/common_defs.hpp>
@@ -50,11 +51,18 @@
         NamespacePlaceholder
>
 {
+ // helper typedef
         typedef detail::full_name_builder<
                 meta_namespace<typename NamespacePlaceholder::parent_placeholder>,
                 NamespacePlaceholder
> base_class;
 
+ /* NOTE: this is an implementation detail and should not
+ * be used outside of mirror
+ */
+ typedef NamespacePlaceholder _placeholder;
+
+ // base_name getter
         inline static const cts::bstring& base_name(void)
         {
                 return base_class::get_name(
@@ -63,6 +71,7 @@
                 );
         }
 
+ // full name getter
         inline static const cts::bstring& full_name(void)
         {
                 return base_class::get_name(
@@ -83,12 +92,17 @@
                 scope
>::type ancestors;
 
- // a meta object sequence of members of this namespace
- typedef BOOST_MIRROR_GET_GLOBAL_LIST_BASE_WRAPPER(
- NamespacePlaceholder,
- BOOST_MIRROR_COUNTER_LUID,
- typename
- ) members;
+ // alows to get a filterred list of members of this namespace
+ template <class UnaryPredicate = mpl::always<mpl::true_> >
+ struct members
+ {
+ typedef BOOST_MIRROR_GET_FILTERED_GLOBAL_LIST_BASE_WRAPPER(
+ NamespacePlaceholder,
+ BOOST_MIRROR_COUNTER_LUID,
+ typename,
+ UnaryPredicate
+ ) type;
+ };
 };
 
 /** The declaration of the namespace placeholder for the
@@ -144,7 +158,12 @@
 template < >
 struct meta_namespace< namespace_ :: _ > : namespace_ :: _
 {
+ // this is an implementation detail
+ typedef namespace_::_ _placeholder;
+
+ // the scope of the global scope
         typedef meta_namespace< namespace_ :: _ > scope;
+ // no ancestors
         typedef mpl::vector0<> ancestors;
 };
 BOOST_MIRROR_REGISTER_GLOBAL_LIST_SELECTOR( ::boost::mirror::namespace_::_)
@@ -192,7 +211,7 @@
  * ) -10-
  * BOOST_MIRROR_ADD_TO_GLOBAL_LIST(
  * ::boost::mirror::namespace_::test::foo::bar::_
- * ::boost::mirror::namespace_::test::foo::bar::baz::_
+ * BOOST_MIRRORED_NAMESPACE(::test::foo::bar::baz::_)
  * ) -11-
  */
 #define BOOST_MIRROR_REG_NAMESPACE(NAME_SEQUENCE) \

Modified: sandbox/mirror/libs/mirror/test/Jamfile.v2
==============================================================================
--- sandbox/mirror/libs/mirror/test/Jamfile.v2 (original)
+++ sandbox/mirror/libs/mirror/test/Jamfile.v2 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -36,6 +36,7 @@
          [ compile classes_ct_06.cpp ]
          [ compile classes_ct_07.cpp ]
          [ compile classes_ct_08.cpp ]
+ [ compile classes_ct_09.cpp ]
          [ run classes_rt_01.cpp ]
          [ run classes_rt_02.cpp ]
          [ run classes_rt_03.cpp ]

Added: sandbox/mirror/libs/mirror/test/classes_ct_09.cpp
==============================================================================
--- (empty file)
+++ sandbox/mirror/libs/mirror/test/classes_ct_09.cpp 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -0,0 +1,192 @@
+/**
+ * \file test/namespaces_ct_05.cpp
+ *
+ * This file is part of the Mirror library testsuite.
+ *
+ * Testing class registration and reflection.
+ *
+ * Copyright 2008 Matus Chochlik. 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/type_traits/is_same.hpp>
+// assert
+#include <boost/mpl/lambda.hpp>
+// namespace registering
+#include <boost/mirror/meta_namespace.hpp>
+// type registering
+#include <boost/mirror/meta_type.hpp>
+// intrinsic meta-functions, iterators and algorithms
+#include <boost/mirror/intrinsic/size.hpp>
+#include <boost/mirror/intrinsic/at.hpp>
+#include <boost/mirror/intrinsic/empty.hpp>
+#include <boost/mirror/intrinsic/begin.hpp>
+#include <boost/mirror/intrinsic/end.hpp>
+#include <boost/mirror/iterators.hpp>
+#include <boost/mirror/algorithm/find_if.hpp>
+//
+#include <boost/mirror/traits/reflects_global_scope.hpp>
+#include <boost/mirror/traits/reflects_namespace.hpp>
+#include <boost/mirror/traits/reflects_type.hpp>
+//
+#include "./test.hpp"
+
+namespace test {
+
+namespace a { }
+namespace b { }
+namespace c { }
+namespace d { }
+struct e { };
+struct f { };
+struct g { };
+struct h { };
+struct i { };
+struct j { };
+
+} // namespace test
+
+namespace boost{
+namespace mirror {
+
+BOOST_MIRROR_REG_NAMESPACE((test))
+BOOST_MIRROR_REG_NAMESPACE((test)(a))
+BOOST_MIRROR_REG_NAMESPACE((test)(b))
+BOOST_MIRROR_REG_NAMESPACE((test)(c))
+BOOST_MIRROR_REG_NAMESPACE((test)(d))
+BOOST_MIRROR_REG_TYPE(::test, e)
+BOOST_MIRROR_REG_TYPE(::test, f)
+BOOST_MIRROR_REG_TYPE(::test, g)
+BOOST_MIRROR_REG_TYPE(::test, h)
+BOOST_MIRROR_REG_TYPE(::test, i)
+BOOST_MIRROR_REG_TYPE(::test, j)
+} // namespace mirror
+} // namespace boost
+
+
+void test_main()
+{
+ using namespace ::boost;
+ using namespace ::boost::mirror;
+ //
+ // define an alternative name for the global scope meta-data
+ typedef BOOST_MIRRORED_NAMESPACE(::test) meta_test;
+ //
+#ifdef BOOST_MIRROR_NO_GLOBAL_LISTS
+ // if the global lists are not available, then mirror does not
+ // reflect namespace members
+ //
+ BOOST_MPL_ASSERT( empty< meta_test::members<>::type > );
+ BOOST_MPL_ASSERT_RELATION( size< meta_test::members<>::type >::value, ==, 0);
+ BOOST_MPL_ASSERT((iterator_equal<
+ begin<meta_test::members<>::type>::type,
+ end<meta_test::members<>::type>::type
+ >));
+ BOOST_MPL_ASSERT_NOT((iterator_not_equal<
+ begin<meta_test::members<>::type>::type,
+ end<meta_test::members<>::type>::type
+ >));
+ BOOST_MPL_ASSERT((iterator_equal<
+ find_if<
+ meta_test::members<>::type,
+ mpl::lambda<reflects_namespace<mpl::_1> >::type
+ >::type,
+ end<meta_test::members<>::type>::type
+ >));
+ BOOST_MPL_ASSERT((iterator_equal<
+ find_if<
+ meta_test::members<>::type,
+ mpl::lambda<reflects_global_scope<mpl::_1> >::type
+ >::type,
+ end<meta_test::members<>::type>::type
+ >));
+#else
+ BOOST_MPL_ASSERT_NOT( empty< meta_test::members<>::type > );
+ BOOST_MPL_ASSERT_RELATION(
+ size< meta_test::members<>::type >::value,
+ ==,
+ 10
+ );
+
+ typedef mpl::lambda<reflects_global_scope<mpl::_1> >::type filter_global_scope;
+ typedef mpl::lambda<reflects_namespace<mpl::_1> >::type filter_namespaces;
+ typedef mpl::lambda<reflects_type<mpl::_1> >::type filter_types;
+ //
+ BOOST_MPL_ASSERT_RELATION(
+ size< meta_test::members< filter_global_scope >::type >::value,
+ ==,
+ 0
+ );
+ BOOST_MPL_ASSERT_RELATION(
+ size< meta_test::members< filter_namespaces >::type >::value,
+ ==,
+ 4
+ );
+ BOOST_MPL_ASSERT_RELATION(
+ size< meta_test::members< filter_types >::type >::value,
+ ==,
+ 6
+ );
+ //
+ BOOST_MPL_ASSERT((iterator_not_equal<
+ begin<meta_test::members<>::type>::type,
+ end<meta_test::members<>::type>::type
+ >));
+ BOOST_MPL_ASSERT_NOT((iterator_equal<
+ begin<meta_test::members<>::type>::type,
+ end<meta_test::members<>::type>::type
+ >));
+ //
+ BOOST_MPL_ASSERT((iterator_not_equal<
+ begin<meta_test::members<filter_types>::type>::type,
+ end<meta_test::members<filter_types>::type>::type
+ >));
+ BOOST_MPL_ASSERT_NOT((iterator_equal<
+ begin<meta_test::members<filter_types>::type>::type,
+ end<meta_test::members<filter_types>::type>::type
+ >));
+ //
+ BOOST_MPL_ASSERT((iterator_not_equal<
+ begin<meta_test::members<filter_namespaces>::type>::type,
+ end<meta_test::members<filter_namespaces>::type>::type
+ >));
+ BOOST_MPL_ASSERT_NOT((iterator_equal<
+ begin<meta_test::members<filter_namespaces>::type>::type,
+ end<meta_test::members<filter_namespaces>::type>::type
+ >));
+ //
+ BOOST_MPL_ASSERT((iterator_equal<
+ find_if<
+ meta_test::members<>::type,
+ mpl::lambda<reflects_namespace<mpl::_1> >::type
+ >::type,
+ begin<meta_test::members<>::type>::type
+ >));
+ BOOST_MPL_ASSERT((iterator_equal<
+ find_if<
+ meta_test::members<>::type,
+ mpl::lambda<reflects_global_scope<mpl::_1> >::type
+ >::type,
+ end<meta_test::members<>::type>::type
+ >));
+ //
+ BOOST_MPL_ASSERT((iterator_equal<
+ find_if<
+ meta_test::members<filter_types>::type,
+ mpl::lambda<reflects_namespace<mpl::_1> >::type
+ >::type,
+ end<meta_test::members<filter_types>::type>::type
+ >));
+
+#endif
+}
+
+test_suite* init_unit_test_suite( int argc, char* argv[] )
+{
+ test_suite *test = BOOST_TEST_SUITE("Mirror: classes compile test 09");
+ test->add(BOOST_TEST_CASE(&test_main));
+ return test;
+}
+
+

Modified: sandbox/mirror/libs/mirror/test/namespaces_ct_05.cpp
==============================================================================
--- sandbox/mirror/libs/mirror/test/namespaces_ct_05.cpp (original)
+++ sandbox/mirror/libs/mirror/test/namespaces_ct_05.cpp 2009-02-25 12:58:31 EST (Wed, 25 Feb 2009)
@@ -78,29 +78,29 @@
         // if the global lists are not available, then mirror does not
         // reflect namespace members
         //
- BOOST_MPL_ASSERT( empty< meta_test::members > );
- BOOST_MPL_ASSERT_RELATION( size< meta_test::members >::value, ==, 0);
+ BOOST_MPL_ASSERT( empty< meta_test::members<>::type > );
+ BOOST_MPL_ASSERT_RELATION( size< meta_test::members<>::type >::value, ==, 0);
         BOOST_MPL_ASSERT((iterator_equal<
- begin<meta_test::members>::type,
- end<meta_test::members>::type
+ begin<meta_test::members<>::type>::type,
+ end<meta_test::members<>::type>::type
>));
         BOOST_MPL_ASSERT_NOT((iterator_not_equal<
- begin<meta_test::members>::type,
- end<meta_test::members>::type
+ begin<meta_test::members<>::type>::type,
+ end<meta_test::members<>::type>::type
>));
         BOOST_MPL_ASSERT((iterator_equal<
                 find_if<
- meta_test::members,
+ meta_test::members<>::type,
                         mpl::lambda<reflects_namespace<mpl::_1> >::type
>::type,
- end<meta_test::members>::type
+ end<meta_test::members<>::type>::type
>));
         BOOST_MPL_ASSERT((iterator_equal<
                 find_if<
- meta_test::members,
+ meta_test::members<>::type,
                         mpl::lambda<reflects_global_scope<mpl::_1> >::type
>::type,
- end<meta_test::members>::type
+ end<meta_test::members<>::type>::type
>));
 #else
         typedef mpl::vector<
@@ -123,10 +123,12 @@
>
>::type meta_namespaces;
 
- BOOST_MPL_ASSERT_NOT( empty< meta_test::members > );
- BOOST_MPL_ASSERT_RELATION( size< meta_test::members >::value, ==, 8);
- // NOTE: this is just a internal implementation detail test
- BOOST_MPL_ASSERT(( mpl::equal< meta_test::members::type, meta_namespaces >));
+ BOOST_MPL_ASSERT_NOT( empty< meta_test::members<>::type > );
+ BOOST_MPL_ASSERT_RELATION(
+ size< meta_test::members<>::type >::value,
+ ==,
+ 8
+ );
         BOOST_MPL_ASSERT((
                 mpl::accumulate<
                         meta_namespaces_and_indices,
@@ -134,7 +136,10 @@
                         mpl::and_<
                                 mpl::_1,
                                 is_same<
- at<meta_test::members, mpl::back<mpl::_2> >,
+ at<
+ meta_test::members<>::type,
+ mpl::back<mpl::_2>
+ >,
                                         mpl::front<mpl::_2>
>
>
@@ -142,26 +147,26 @@
         ));
         //
         BOOST_MPL_ASSERT((iterator_not_equal<
- begin<meta_test::members>::type,
- end<meta_test::members>::type
+ begin<meta_test::members<>::type>::type,
+ end<meta_test::members<>::type>::type
>));
         BOOST_MPL_ASSERT_NOT((iterator_equal<
- begin<meta_test::members>::type,
- end<meta_test::members>::type
+ begin<meta_test::members<>::type>::type,
+ end<meta_test::members<>::type>::type
>));
         BOOST_MPL_ASSERT((iterator_equal<
                 find_if<
- meta_test::members,
+ meta_test::members<>::type,
                         mpl::lambda<reflects_namespace<mpl::_1> >::type
>::type,
- begin<meta_test::members>::type
+ begin<meta_test::members<>::type>::type
>));
         BOOST_MPL_ASSERT((iterator_equal<
                 find_if<
- meta_test::members,
+ meta_test::members<>::type,
                         mpl::lambda<reflects_global_scope<mpl::_1> >::type
>::type,
- end<meta_test::members>::type
+ end<meta_test::members<>::type>::type
>));
  
 #endif


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