[complement-svn] SF.net SVN: complement: [1663] trunk/complement/explore/include/misc/ type_traits.
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2007-08-03 10:42:35
|
Revision: 1663 http://complement.svn.sourceforge.net/complement/?rev=1663&view=rev Author: complement Date: 2007-08-03 03:42:32 -0700 (Fri, 03 Aug 2007) Log Message: ----------- fix for gcc 3.3.6 Modified Paths: -------------- trunk/complement/explore/include/misc/type_traits.h Modified: trunk/complement/explore/include/misc/type_traits.h =================================================================== --- trunk/complement/explore/include/misc/type_traits.h 2007-08-03 10:09:12 UTC (rev 1662) +++ trunk/complement/explore/include/misc/type_traits.h 2007-08-03 10:42:32 UTC (rev 1663) @@ -59,9 +59,9 @@ #define __SPEC_FULL1(C,T,B) \ __SPEC_1(C,T,B); \ -__SPEC_1(C,const T,B); \ -__SPEC_1(C,volatile T,B); \ -__SPEC_1(C,const volatile T,B) +__SPEC_1(C,T const,B); \ +__SPEC_1(C,T volatile,B); \ +__SPEC_1(C,T const volatile,B) #define __SPEC_2(C,T,B) \ template <class _Tp1, class _Tp2> \ @@ -71,9 +71,9 @@ #define __SPEC_FULL2(C,T,B) \ __SPEC_2(C,T,B); \ -__SPEC_2(C,const T,B); \ -__SPEC_2(C,volatile T,B); \ -__SPEC_2(C,const volatile T,B) +__SPEC_2(C,T const,B); \ +__SPEC_2(C,T volatile,B); \ +__SPEC_2(C,T const volatile,B) template <class _Tp> struct is_void : @@ -170,15 +170,55 @@ public false_type { }; -_SPEC_FULL2(is_member_object_pointer, _Tp1 _Tp2::*,!is_function<_Tp1>::value); +// _SPEC_FULL2(is_member_object_pointer, _Tp1 _Tp2::*,!is_function<_Tp1>::value); +template <class _Tp1, class _Tp2> +struct is_member_object_pointer<_Tp1 _Tp2::*> : + public integral_constant<bool, !is_function<_Tp1>::value> +{ }; + +template <class _Tp1, class _Tp2> +struct is_member_object_pointer<_Tp1 _Tp2::* const> : + public integral_constant<bool, !is_function<_Tp1>::value> +{ }; + +template <class _Tp1, class _Tp2> +struct is_member_object_pointer<_Tp1 _Tp2::* volatile> : + public integral_constant<bool, !is_function<_Tp1>::value> +{ }; + +template <class _Tp1, class _Tp2> +struct is_member_object_pointer<_Tp1 _Tp2::* const volatile> : + public integral_constant<bool, !is_function<_Tp1>::value> +{ }; + template <class _Tp> struct is_member_function_pointer : public false_type { }; -_SPEC_FULL2(is_member_function_pointer, _Tp1 _Tp2::*,is_function<_Tp1>::value); +// _SPEC_FULL2(is_member_function_pointer,_Tp1 _Tp2::*,is_function<_Tp1>::value); +template <class _Tp1, class _Tp2> +struct is_member_function_pointer<_Tp1 _Tp2::*> : + public integral_constant<bool, is_function<_Tp1>::value> +{ }; + +template <class _Tp1, class _Tp2> +struct is_member_function_pointer<_Tp1 _Tp2::* const> : + public integral_constant<bool, is_function<_Tp1>::value> +{ }; + +template <class _Tp1, class _Tp2> +struct is_member_function_pointer<_Tp1 _Tp2::* volatile> : + public integral_constant<bool, is_function<_Tp1>::value> +{ }; + +template <class _Tp1, class _Tp2> +struct is_member_function_pointer<_Tp1 _Tp2::* const volatile> : + public integral_constant<bool, is_function<_Tp1>::value> +{ }; + template <class _Tp> struct is_member_pointer : public integral_constant<bool, (is_member_object_pointer<_Tp>::value || is_member_function_pointer<_Tp>::value)> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |