Author: vitek Date: Tue Jul 22 13:49:11 2008 New Revision: 678894 URL: http://svn.apache.org/viewvc?rev=678894&view=rev Log: 2008-07-22 Travis Vitek <[EMAIL PROTECTED]>
STDCXX-1002 * include/rw/_meta_prop.h [__SUNPRO_CC]: Work around sunpro-5.9 detecting cv-qualifiers on array types. Modified: stdcxx/branches/4.3.x/include/rw/_meta_prop.h Modified: stdcxx/branches/4.3.x/include/rw/_meta_prop.h URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/include/rw/_meta_prop.h?rev=678894&r1=678893&r2=678894&view=diff ============================================================================== --- stdcxx/branches/4.3.x/include/rw/_meta_prop.h (original) +++ stdcxx/branches/4.3.x/include/rw/_meta_prop.h Tue Jul 22 13:49:11 2008 @@ -45,18 +45,71 @@ template <> struct Trait<Type const volatile> : __rw_true_type { } +#if defined (__SUNPRO_CC) && (__SUNPRO_CC <= 0x590) + template <class _TypeT> -struct __rw_is_const : __rw_false_type +struct __rw_is_const_impl { + struct _C_no { }; + struct _C_yes { _C_no __pad [2]; }; + + template <class _TypeU> + struct _C_nest { }; + + template <class _TypeU> + static _C_yes _C_test (_C_nest<const _TypeU>*); + + template <class _TypeU> + static _C_no _C_test (_C_nest<_TypeU>*); + + enum { _C_value = + sizeof (_C_test ((_C_nest<_TypeT>*)0)) == sizeof (_C_yes) + }; }; template <class _TypeT> -struct __rw_is_const<const _TypeT> : __rw_true_type +struct __rw_is_const + : __rw_integral_constant<bool, __rw_is_const_impl<_TypeT>::_C_value> { }; -#define _RWSTD_IS_CONST(T) _RW::__rw_is_const<T>::value +template <class _TypeT> +struct __rw_is_volatile_impl +{ + struct _C_no { }; + struct _C_yes { _C_no __pad [2]; }; + template <class _TypeU> + struct _C_nest { }; + + template <class _TypeU> + static _C_yes _C_test (_C_nest<volatile _TypeU>*); + + template <class _TypeU> + static _C_no _C_test (_C_nest<_TypeU>*); + + enum { _C_value = + sizeof (_C_test ((_C_nest<_TypeT>*)0)) == sizeof (_C_yes) + }; +}; + +template <class _TypeT> +struct __rw_is_volatile + : __rw_integral_constant<bool, __rw_is_volatile_impl<_TypeT>::_C_value> +{ +}; + +#else + +template <class _TypeT> +struct __rw_is_const : __rw_false_type +{ +}; + +template <class _TypeT> +struct __rw_is_const<const _TypeT> : __rw_true_type +{ +}; template <class _TypeT> struct __rw_is_volatile : __rw_false_type @@ -68,6 +121,9 @@ { }; +#endif + +#define _RWSTD_IS_CONST(T) _RW::__rw_is_const<T>::value #define _RWSTD_IS_VOLATILE(T) _RW::__rw_is_volatile<T>::value