$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: chochlik_at_[hidden]
Date: 2008-07-05 07:11:35
Author: matus.chochlik
Date: 2008-07-05 07:11:34 EDT (Sat, 05 Jul 2008)
New Revision: 47092
URL: http://svn.boost.org/trac/boost/changeset/47092
Log:
- Fixed multi-dimensional array type name building
- Added build_name(...) member function to the meta_type template
- Updated the registering/types.cpp example
- Added BOOST_MIRROR_REG_TYPE_GS as shorthand for BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE
- Added BOOST_MIRROR_REG_TYPEEF_GS and for BOOST_MIRROR_REG_TYPEDEF_GLOBAL_SCOPE for registering global scope typedefs
- Added BOOST_MIRROR_REG_TYPE_EMBEDDED and for BOOST_MIRROR_REG_TYPE_EMB for registering embedded types
Text files modified: 
   sandbox/mirror/boost/mirror/detail/decorated_type_name.hpp |   173 +++++++++++++++++++++------------------ 
   sandbox/mirror/boost/mirror/detail/full_name_builder.hpp   |    52 ++++++++---                             
   sandbox/mirror/boost/mirror/meta_type.hpp                  |    64 +++++++++++---                          
   sandbox/mirror/libs/mirror/doc/xml/mirror/_library.xml     |    11 +                                       
   sandbox/mirror/libs/mirror/example/registering/types.cpp   |    73 +++++++++-------                        
   5 files changed, 228 insertions(+), 145 deletions(-)
Modified: sandbox/mirror/boost/mirror/detail/decorated_type_name.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/detail/decorated_type_name.hpp	(original)
+++ sandbox/mirror/boost/mirror/detail/decorated_type_name.hpp	2008-07-05 07:11:34 EDT (Sat, 05 Jul 2008)
@@ -24,28 +24,37 @@
 {
 private:
         template <bool FullName>
-	inline static bstring init_name(
-		mpl::bool_<FullName> _full,
-		const bstring& left, 
-		const bstring& right
-	)
+	inline static bstring init_name(mpl::bool_<FullName> full_or_base)
         {
-		bstring res(Decorator::prefix());
-		res.append(MetaType::get_name(_full));
-		res.append(Decorator::postfix());
-		return res;
+		bstring left;
+		bstring right;
+		bstring temp(build_name(full_or_base, left, right));
+		left.append(temp);
+		left.append(right);
+		return left;
         }
+
+
 public:
         template <bool FullName>
-	static const bstring& get_name(
-		mpl::bool_<FullName> _full,
-		const bstring& left = bstring(), 
-		const bstring& right = bstring()
+	inline static bstring build_name(
+		mpl::bool_<FullName> full_or_base,
+		bstring& left, 
+		bstring& right
         )
         {
-		static bstring s_name(
-			init_name(_full, left, right)
+		Decorator D(left, right);
+		return MetaType::build_name(
+			full_or_base,
+			left,
+			right
                 );
+	}
+
+	template <bool FullName>
+	static const bstring& get_name(mpl::bool_<FullName> full_or_base)
+	{
+		static bstring s_name(init_name(full_or_base));
                 return s_name;
         }
 
@@ -65,106 +74,112 @@
 template <typename T>
 struct type_name_decorator
 {
-	inline static bstring  prefix(void){return bstring();}
-	inline static bstring postfix(void){return bstring();}
+	inline type_name_decorator(bstring&, bstring&);
 };
 
-// pointer decorator
-template <typename T>
-struct type_name_decorator<T*>
+struct type_name_right_postfix_decorator
 {
-	inline static bstring  prefix(void){return bstring();}
-	inline static bstring postfix(void)
-	{
-		return bstring(BOOST_STR_LIT(" *"));
-	}
-};
+	inline type_name_right_postfix_decorator(bstring& _r, const bchar* _pfx)
+	: right(_r), postfix(_pfx) { }
 
-// array decorator
-template <typename T, size_t Size>
-struct type_name_decorator< T[ Size ] >
-{
-private:
-	inline static bstring init_postfix(void)
-	{
-		typedef typename detail::static_int_to_str<Size>
-			size_string;
-		// init with '['
-		bstring res(BOOST_STR_LIT(" ["));
-		// 
-		// setup a buffer for the number
-		const size_t max_size = size_string::length::value+1;
-		bchar buffer[max_size];
-		// put it into the buffer
-		size_string::convert(buffer, max_size);
-		// append the buffer
-		res.append(bstring(buffer));
-		// append ']'
-		res.append(bstring(BOOST_STR_LIT("]")));
-		return res;
-	}
-public:
-	inline static bstring  prefix(void){return bstring();}
-	inline static const bstring& postfix(void)
+	inline ~type_name_right_postfix_decorator(void)
         {
-		static bstring s_postfix(init_postfix());
-		return s_postfix;
+		right.append(bstring(postfix));
         }
+	bstring& right;
+	const bchar* postfix;
 };
 
-// array decorator
+// pointer decorator
 template <typename T>
-struct type_name_decorator< T[] >
+struct type_name_decorator<T*>
+: type_name_right_postfix_decorator
 {
-	inline static bstring  prefix(void){return bstring();}
-	inline static bstring postfix(void)
-	{
-		return bstring(BOOST_STR_LIT(" []"));
-	}
+	inline type_name_decorator(bstring&, bstring& _right)
+	: type_name_right_postfix_decorator(_right, BOOST_STR_LIT(" *"))
+	{ }
 };
 
 
 // reference decorator
 template <typename T>
 struct type_name_decorator<T&>
+: type_name_right_postfix_decorator
 {
-	inline static bstring  prefix(void){return bstring();}
-	inline static bstring postfix(void)
-	{
-		return bstring(BOOST_STR_LIT(" &"));
-	}
+	inline type_name_decorator(bstring&, bstring& _right)
+	: type_name_right_postfix_decorator(_right, BOOST_STR_LIT(" &"))
+	{ }
 };
 
 // const type decorator
 template <typename T>
 struct type_name_decorator<const T>
+: type_name_right_postfix_decorator
 {
-	inline static bstring  prefix(void){return bstring();}
-	inline static bstring postfix(void)
-	{
-		return bstring(BOOST_STR_LIT(" const"));
-	}
+	inline type_name_decorator(bstring&, bstring& _right)
+	: type_name_right_postfix_decorator(_right, BOOST_STR_LIT(" const"))
+	{ }
 };
 
 // volatile type decorator
 template <typename T>
 struct type_name_decorator<volatile T>
+: type_name_right_postfix_decorator
 {
-	inline static bstring  prefix(void){return bstring();}
-	inline static bstring postfix(void)
-	{
-		return bstring(BOOST_STR_LIT(" volatile"));
-	}
+	inline type_name_decorator(bstring&, bstring& _right)
+	: type_name_right_postfix_decorator(_right, BOOST_STR_LIT(" volatile"))
+	{ }
 };
 
 // const volatile type decorator
 template <typename T>
 struct type_name_decorator<const volatile T>
+: type_name_right_postfix_decorator
+{
+	inline type_name_decorator(bstring&, bstring& _r)
+	: type_name_right_postfix_decorator(_r, BOOST_STR_LIT(" const volatile"))
+	{ }
+};
+
+// array decorator
+template <typename T>
+struct type_name_decorator< T[] >
 {
-	inline static bstring  prefix(void){return bstring();}
-	inline static bstring postfix(void)
+	inline type_name_decorator(bstring&, bstring& _right)
         {
-		return bstring(BOOST_STR_LIT(" const volatile"));
+		_right.append(BOOST_STR_LIT(" []"));
+	}
+};
+
+
+// array decorator
+template <typename T, size_t Size>
+struct type_name_decorator< T[ Size ] >
+{
+private:
+	inline static bstring init_postfix(void)
+	{
+		typedef typename detail::static_int_to_str<Size>
+			size_string;
+		// init with '['
+		bstring res(BOOST_STR_LIT(" ["));
+		// 
+		// setup a buffer for the number
+		const size_t max_size = size_string::length::value+1;
+		bchar buffer[max_size];
+		// put it into the buffer
+		size_string::convert(buffer, max_size);
+		// append the buffer
+		res.append(bstring(buffer));
+		// append ']'
+		res.append(bstring(BOOST_STR_LIT("]")));
+		return res;
+	}
+public:
+	inline type_name_decorator(bstring&, bstring& _right)
+	{
+		static bstring s_postfix(init_postfix());
+		_right.append(s_postfix);
         }
 };
 
Modified: sandbox/mirror/boost/mirror/detail/full_name_builder.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/detail/full_name_builder.hpp	(original)
+++ sandbox/mirror/boost/mirror/detail/full_name_builder.hpp	2008-07-05 07:11:34 EDT (Sat, 05 Jul 2008)
@@ -40,6 +40,17 @@
         struct full_name_builder : public BaseMetaObject
         {
         private:
+
+		// don't prepend '::' to types on global scope
+		template <typename Type>
+		inline static void append_separator(
+			bstring& _str, 
+			mpl::identity<meta_namespace<namespace_::_> >,
+			mpl::identity<detail::registered_type_info<Type> >
+		)
+		{ }
+
+		// append separator to anything else
                 template <typename AnyScope, class AnyMO>
                 inline static void append_separator(
                         bstring& _str, 
@@ -51,20 +62,11 @@
                         _str.append(separator);
                 }
 
-		// don't prepend '::' to types on global scope
-		template <typename Type>
-		inline static void append_separator(
-			bstring& _str, 
-			mpl::identity<meta_namespace<namespace_::_> >,
-			mpl::identity<detail::registered_type_info<Type> >
-		)
-		{ }
-
 
                 // initializes the full names 
-		inline static bstring init_name(void)
+		inline static bstring init_name(mpl::true_ _full)
                 {
-			bstring res(Scope::get_name(mpl::true_()));
+			bstring res(Scope::get_name(_full));
                         append_separator(
                                 res, 
                                 mpl::identity<Scope>(),
@@ -73,16 +75,32 @@
                         res.append(BaseMetaObject::get_name(mpl::false_()));
                         return res;
                 }
-	public:
-		// base name getter
-		inline static const bstring& get_name(mpl::false_ _base)
+
+		// initializes the base names 
+		inline static const bstring& init_name(mpl::false_ _base)
                 {
                         return BaseMetaObject::get_name(_base);
                 }
-		// full name getter
-		inline static const bstring& get_name(mpl::true_)
+	public:
+		// base of full name getter
+		template <bool FullName>
+		inline static const bstring& build_name(
+			mpl::bool_<FullName> full_or_base,
+			bstring& left,
+			bstring& right
+		)
+		{
+			return get_name(full_or_base);
+		}
+
+
+		// base of full name getter
+		template <bool FullName>
+		inline static const bstring& get_name(
+			mpl::bool_<FullName> full_or_base
+		)
                 {
-			static bstring s_name(init_name());
+			static bstring s_name(init_name(full_or_base));
                         return s_name;
                 }
         };
Modified: sandbox/mirror/boost/mirror/meta_type.hpp
==============================================================================
--- sandbox/mirror/boost/mirror/meta_type.hpp	(original)
+++ sandbox/mirror/boost/mirror/meta_type.hpp	2008-07-05 07:11:34 EDT (Sat, 05 Jul 2008)
@@ -57,7 +57,7 @@
 
 /** Macro for registering global-scope types
  */
-#define BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(BASE_NAME) \
+#define BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(BASE_NAME) \
         namespace detail { \
         template <> struct registered_type_info< BASE_NAME > \
         { \
@@ -67,6 +67,12 @@
         }; \
         } // namespace detail
 
+/** 'Shorthand' for BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE macro 
+ */
+#define BOOST_MIRROR_REG_TYPE_GS(BASE_NAME) \
+	BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(BASE_NAME)
+
+
 /** Macro for registering types nested in namespaces
  */
 #define BOOST_MIRROR_REG_TYPE(NAMESPACE, BASE_NAME) \
@@ -86,6 +92,30 @@
                 BOOST_MIRRORED_NAMESPACE( NAMESPACE ) \
 	> \
 
+/** Macro for registering typedef-ined types in the global scope
+ */
+#define BOOST_MIRROR_REG_TYPEDEF_GLOBAL_SCOPE(TYPEDEFD_NAME) \
+	namespace typedef_ { \
+		template <class MetaNamespace> struct TYPEDEFD_NAME; \
+		template <> struct TYPEDEFD_NAME< \
+			BOOST_MIRRORED_GLOBAL_SCOPE() \
+		> { }; \
+	} /* namespace typedef_ */ \
+	namespace detail { \
+	template <> struct registered_type_info< \
+		BOOST_MIRROR_GET_TYPEDEFD_TYPE_SELECTOR( :: , TYPEDEFD_NAME) \
+	> \
+	{ \
+		typedef BOOST_MIRRORED_GLOBAL_SCOPE() scope; \
+		typedef ::TYPEDEFD_NAME reflected_type; \
+		BOOST_MIRROR_REG_TYPE_DECLARE_BASE_NAME_HELPER(TYPEDEFD_NAME) \
+	}; \
+	} // namespace detail
+
+#define BOOST_MIRROR_REG_TYPEDEF_GS(TYPEDEFD_NAME) \
+	BOOST_MIRROR_REG_TYPEDEF_GLOBAL_SCOPE(TYPEDEFD_NAME) 
+
+
 /** Macro for registering typedef-ined types in namespaces
  */
 #define BOOST_MIRROR_REG_TYPEDEF(NAMESPACE, TYPEDEFD_NAME) \
@@ -117,22 +147,26 @@
                 BOOST_MIRROR_REG_TYPE_DECLARE_BASE_NAME_HELPER(BASE_NAME) \
         };
 
+#define BOOST_MIRROR_REG_TYPE_EMB(WRAPPER, BASE_NAME) \
+	BOOST_MIRROR_REG_TYPE_EMBEDDED(WRAPPER, BASE_NAME)
+
+
 /** Register C++ native types
  */
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(void)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(bool)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(char)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(unsigned char)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(signed char)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(wchar_t)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(short int)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(unsigned short int)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(int)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(unsigned int)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(long int)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(unsigned long int)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(float)
-BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(double)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(void)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(bool)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(char)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(unsigned char)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(signed char)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(wchar_t)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(short int)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(unsigned short int)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(int)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(unsigned int)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(long int)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(unsigned long int)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(float)
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(double)
 
 /** Register std string and wstring
  */
Modified: sandbox/mirror/libs/mirror/doc/xml/mirror/_library.xml
==============================================================================
--- sandbox/mirror/libs/mirror/doc/xml/mirror/_library.xml	(original)
+++ sandbox/mirror/libs/mirror/doc/xml/mirror/_library.xml	2008-07-05 07:11:34 EDT (Sat, 05 Jul 2008)
@@ -243,12 +243,17 @@
                         - Complete rewrite of type registering and reflection
 
                         - Changed the return value of base_name and full_name getters from const bchar* to bstring / const bstring&
-			- Replaced BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(TYPE) with BOOST_MIRROR_REG_GLOBAL_SCOPE_TYPE(TYPE) macro
 
                         - Added get_name(mpl::bool_<FullName>) function that gets the base name with mpl::false_ and full name with mpl::true_
                         - Removed the old non-trivial type name meta_types
-			- Added new meta_type name decorator
-			  
+			- Added new meta_type name decorators
+
+			- Fixed multi-dimensional array type name building
+			- Added build_name(...) member function to the meta_type template
+			- Updated the registering/types.cpp example
+			- Added BOOST_MIRROR_REG_TYPE_GS as shorthand for BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE
+			- Added BOOST_MIRROR_REG_TYPEEF_GS and for BOOST_MIRROR_REG_TYPEDEF_GLOBAL_SCOPE for registering global scope typedefs
+			- Added BOOST_MIRROR_REG_TYPE_EMBEDDED and for BOOST_MIRROR_REG_TYPE_EMB for registering embedded types
 
                         - Tested with MSVC++ 2008 EE On Vista
                 </revision>
Modified: sandbox/mirror/libs/mirror/example/registering/types.cpp
==============================================================================
--- sandbox/mirror/libs/mirror/example/registering/types.cpp	(original)
+++ sandbox/mirror/libs/mirror/example/registering/types.cpp	2008-07-05 07:11:34 EDT (Sat, 05 Jul 2008)
@@ -15,9 +15,6 @@
 #include <boost/mirror/meta_type.hpp>
 //
 #include <boost/mirror/traits/reflects_global_scope.hpp>
-// utility that allows to put the name of the type to a given stream
-#include <boost/mirror/utils/name_to_stream/type.hpp>
-//
 //
 #include <boost/typeof/typeof.hpp>
 
@@ -35,6 +32,10 @@
 } // namespace feature
 } // namespace test
 
+struct bar { };
+struct baz { };
+typedef double foobar;
+
 
 namespace boost { 
 namespace mirror {
@@ -54,6 +55,15 @@
 // register a typedef'd class this allows to distinguish it from
 // the 'source' type in some situations
 BOOST_MIRROR_REG_TYPEDEF(::test::feature::detail, foobar)
+//
+// register type on the global scope
+BOOST_MIRROR_REG_TYPE_GLOBAL_SCOPE(bar)
+// shorter version
+BOOST_MIRROR_REG_TYPE_GS(baz)
+//
+// typedef on the global scope
+// equivalent to BOOST_MIRROR_REG_TYPEDEF_GLOBAL_SCOPE(foobar) 
+BOOST_MIRROR_REG_TYPEDEF_GS(foobar)
 
 } // namespace mirror
 } // namespace boost
@@ -77,39 +87,37 @@
         //
         // put the full name of the type to the output stream
         //
-	bcout << "|00| " << name_to_stream< BOOST_MIRRORED_TYPE(int) >() << endl;
-	bcout << "|01| " << name_to_stream< BOOST_MIRRORED_TYPE(foo) >() << endl;
-	bcout << "|02| " << name_to_stream< BOOST_MIRRORED_TYPE(bar) >() << endl;
+	//
+	bcout << "|00| " << BOOST_MIRRORED_TYPE(int) ::full_name() << endl;
+	bcout << "|01| " << BOOST_MIRRORED_TYPE(foo) ::full_name() << endl;
+	bcout << "|02| " << BOOST_MIRRORED_TYPE(bar) ::full_name() << endl;
         //
         // Do the same thing with the typedef'd type
-	// actually, nearly the same .. the true argument given to the 
-	// constructor makes the name_to_stream<> template, output the 
-	// leading "::" too.
-	bcout << "|03| " << name_to_stream< meta_foo >(true) << endl;
-	bcout << "|04| " << name_to_stream< meta_bar >(true) << endl;
+	bcout << "|03| " << meta_foo ::full_name() << endl;
+	bcout << "|04| " << meta_bar ::full_name() << endl;
 
         //
         // this works too...
-	bcout << "|05| " << name_to_stream< BOOST_MIRRORED_TYPE(foo*) >() << endl;
-	bcout << "|06| " << name_to_stream< BOOST_MIRRORED_TYPE(bar&) >() << endl;
-	bcout << "|07| " << name_to_stream< BOOST_MIRRORED_TYPE(foo***) >() << endl;
-	bcout << "|08| " << name_to_stream< BOOST_MIRRORED_TYPE(bar**&) >() << endl;
-	bcout << "|09| " << name_to_stream< BOOST_MIRRORED_TYPE(const foo**) >() << endl;
-	bcout << "|10| " << name_to_stream< BOOST_MIRRORED_TYPE(volatile bar*&) >() << endl;
+	bcout << "|05| " << BOOST_MIRRORED_TYPE(foo*)::full_name() << endl;
+	bcout << "|06| " << BOOST_MIRRORED_TYPE(bar&)::full_name() << endl;
+	bcout << "|07| " << BOOST_MIRRORED_TYPE(foo***)::full_name() << endl;
+	bcout << "|08| " << BOOST_MIRRORED_TYPE(bar**&) ::full_name() << endl;
+	bcout << "|09| " << BOOST_MIRRORED_TYPE(const foo**)::full_name() << endl;
+	bcout << "|10| " << BOOST_MIRRORED_TYPE(volatile bar*&)::full_name() << endl;
         //
-	bcout << "|11| " << name_to_stream< BOOST_MIRRORED_TYPE(const volatile foo) >() << endl;
-	bcout << "|12| " << name_to_stream< BOOST_MIRRORED_TYPE(const volatile bar*) >() << endl;
+	bcout << "|11| " << BOOST_MIRRORED_TYPE(const volatile foo)::full_name() << endl;
+	bcout << "|12| " << BOOST_MIRRORED_TYPE(const volatile bar*)::full_name() << endl;
         //
         // native c++ types are registered by default
-	bcout << "|13| " << name_to_stream< BOOST_MIRRORED_TYPE(volatile short int) >() << endl;
-	bcout << "|14| " << name_to_stream< BOOST_MIRRORED_TYPE(const char*) >() << endl;
-	bcout << "|15| " << name_to_stream< BOOST_MIRRORED_TYPE(wchar_t*) >() << endl;
-	bcout << "|16| " << name_to_stream< BOOST_MIRRORED_TYPE(bool) >() << endl;
+	bcout << "|13| " << BOOST_MIRRORED_TYPE(volatile short int)::full_name() << endl;
+	bcout << "|14| " << BOOST_MIRRORED_TYPE(const char*)::full_name() << endl;
+	bcout << "|15| " << BOOST_MIRRORED_TYPE(wchar_t*)::full_name() << endl;
+	bcout << "|16| " << BOOST_MIRRORED_TYPE(bool)::full_name() << endl;
         //
         // use with Boost.Typeof
-	bcout << "|17| " << name_to_stream< BOOST_MIRRORED_TYPE(BOOST_TYPEOF(1+1)) >() << endl;
+	bcout << "|17| " << BOOST_MIRRORED_TYPE(BOOST_TYPEOF(1+1))::full_name() << endl;
         // ... and maybe more conveniently
-	bcout << "|18| " << name_to_stream< BOOST_MIRRORED_TYPEOF(1.0/2.0) >() << endl;
+	bcout << "|18| " << BOOST_MIRRORED_TYPEOF(1.0/2.0)::full_name() << endl;
         //
 
         // sometimes it is useful to distinguish between a typedef'd type
@@ -124,9 +132,9 @@
         typedef BOOST_MIRRORED_TYPEDEF(::test::feature::detail, foobar) meta_foobar_td;
 
         //
-	bcout << "|19| " << name_to_stream< meta_bchar     >() << endl;
-	bcout << "|20| " << name_to_stream< meta_bchar_td  >() << endl;
-	bcout << "|21| " << name_to_stream< meta_foobar_td >() << endl;
+	bcout << "|19| " << meta_bchar     ::full_name() << endl;
+	bcout << "|20| " << meta_bchar_td  ::full_name() << endl;
+	bcout << "|21| " << meta_foobar_td ::full_name() << endl;
         //
         // unfortunately BOOST_MIRRORED_TYPEDEF(...) works only if
         // the typedefined name is explicitly given 
@@ -152,8 +160,6 @@
         bcout << "|28| " << BOOST_MIRRORED_TYPEDEF(::boost, bchar) ::full_name() << endl;
         bcout << "|29| " << BOOST_MIRRORED_TYPEDEF(::boost, bstring) ::full_name() << endl;
 
-	bcout << "|30| " << BOOST_MIRRORED_TYPE(int const * ) ::full_name() << endl;
-
         bcout << "|30| " << BOOST_MIRRORED_TYPE(int const * const volatile) ::full_name() << endl;
         bcout << "|31| " << BOOST_MIRRORED_TYPE(int volatile * const * volatile * const *) ::full_name() << endl;
         bcout << "|32| " << BOOST_MIRRORED_TYPE(int const * const [321]) ::full_name() << endl;
@@ -167,9 +173,14 @@
         bcout << "|39| " << BOOST_MIRRORED_TYPE(const foo**) ::full_name() << endl;
         bcout << "|40| " << BOOST_MIRRORED_TYPE(volatile bar*&) ::full_name() << endl;
         //
-	bcout << "|41| " << BOOST_MIRRORED_TYPE(const volatile foo) ::full_name() << endl;
+	bcout << "|41| " << BOOST_MIRRORED_TYPE(const volatile foo&) ::full_name() << endl;
         bcout << "|42| " << BOOST_MIRRORED_TYPE(const volatile bar*) ::full_name() << endl;
         //
+	bcout << "|43| " << BOOST_MIRRORED_TYPE(const volatile ::bar&) ::full_name() << endl;
+	bcout << "|44| " << BOOST_MIRRORED_TYPE(const volatile ::baz*) ::full_name() << endl;
+	bcout << "|44| " << BOOST_MIRRORED_TYPEDEF(::, foobar) ::full_name() << endl;
+	//
+	bcout << "|45| " << BOOST_MIRRORED_TYPE(::bar[][1][2][3][4][5][6][7][8][9]) ::full_name() << endl;
         //
         return 0;
 }