You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by vi...@apache.org on 2008/07/12 01:58:14 UTC

svn commit: r676102 - in /stdcxx/branches/4.3.x: include/rw/_config-eccp.h include/rw/_meta_prop.h tests/utilities/20.meta.trans.other.cpp tests/utilities/20.meta.unary.prop.cpp

Author: vitek
Date: Fri Jul 11 16:58:13 2008
New Revision: 676102

URL: http://svn.apache.org/viewvc?rev=676102&view=rev
Log:
2008-07-11  Travis Vitek  <vi...@roguewave.com>

	STDCXX-916
	* include/rw/_meta_prop.h (__rw_is_pod_impl): Remove cv-qualifiers
	on types.
	[__EDG_VERSION__]: Work around incorrect __is_pod(),
	__has_trivial_constructor(), __has_trivial_assign(),
	__has_trivial_copy(), __has_trivial_destructor(),
	__has_nothrow_constructor(), __has_nothrow_assign(),
	__has_nothrow_copy(), __is_empty().
	* include/rw/_config-eccp.h [__EDG_VERSION__]: Define helper macros
	for built-in trait names.
	* tests/utilities/20.meta.trans.other.cpp (_cond_if_char): Change
	linkage so that function is found when instantiating cond_if_char.
	* tests/utilities/20.meta.unary.prop.cpp: Add constructor to type
	member_t.
	[_RWSTD_NO_LONG_LONG]: Guard code using long long to avoid compile
	error when type is not supported.


Modified:
    stdcxx/branches/4.3.x/include/rw/_config-eccp.h
    stdcxx/branches/4.3.x/include/rw/_meta_prop.h
    stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.other.cpp
    stdcxx/branches/4.3.x/tests/utilities/20.meta.unary.prop.cpp

Modified: stdcxx/branches/4.3.x/include/rw/_config-eccp.h
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/include/rw/_config-eccp.h?rev=676102&r1=676101&r2=676102&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/include/rw/_config-eccp.h (original)
+++ stdcxx/branches/4.3.x/include/rw/_config-eccp.h Fri Jul 11 16:58:13 2008
@@ -66,3 +66,33 @@
 #    define _RWSTD_NO_EXCEPTIONS
 #  endif   // _RWSTD_NO_EXCEPTIONS
 #endif   // __EXCEPTIONS
+
+#if (310 <= __EDG_VERSION__)
+#  define _RWSTD_TT_IS_ENUM(T)              __is_enum(T)
+#  define _RWSTD_TT_IS_UNION(T)             __is_union(T)
+#  define _RWSTD_TT_IS_CLASS(T)             __is_class(T)
+#  define _RWSTD_TT_IS_POD(T)               __is_pod(T)
+#  define _RWSTD_TT_IS_EMPTY(T)             __is_empty(T)
+#  define _RWSTD_TT_IS_POLYMORPHIC(T)       __is_polymorphic(T)
+#  define _RWSTD_TT_IS_CONVERTIBLE(T,U)     __is_convertible_to(T,U)
+#  define _RWSTD_TT_IS_ABSTRACT(T)          __is_abstract(T)
+#  define _RWSTD_TT_IS_BASE_OF(T,U)         __is_base_of(T,U)
+
+#  define _RWSTD_TT_HAS_TRIVIAL_CTOR(T)     __has_trivial_constructor(T)
+#  define _RWSTD_TT_HAS_TRIVIAL_COPY(T)     __has_trivial_copy(T)
+#  define _RWSTD_TT_HAS_TRIVIAL_ASSIGN(T)   __has_trivial_assign(T)
+#  define _RWSTD_TT_HAS_TRIVIAL_DTOR(T)     __has_trivial_destructor(T)
+
+#  define _RWSTD_TT_HAS_NOTHROW_CTOR(T)     __has_nothrow_constructor(T)
+#  define _RWSTD_TT_HAS_NOTHROW_COPY(T)     __has_nothrow_copy(T)
+#  define _RWSTD_TT_HAS_NOTHROW_ASSIGN(T)   __has_nothrow_assign(T)
+
+#  define _RWSTD_TT_HAS_VIRTUAL_DTOR(T)     __has_virtual_destructor(T)
+
+#  define _RWSTD_TT_ALIGN_OF(T)             __alignof__(T)
+#  define _RWSTD_TT_MAX_ALIGNMENT           16
+
+// need to find a way to align data
+#  define _RWSTD_TT_ALIGNED_POD(N)          struct { double _C_align; }
+#endif   // __EDG_VERSION__ >= 3.10 
+

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=676102&r1=676101&r2=676102&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/include/rw/_meta_prop.h (original)
+++ stdcxx/branches/4.3.x/include/rw/_meta_prop.h Fri Jul 11 16:58:13 2008
@@ -32,6 +32,7 @@
 
 #include <rw/_defs.h>
 #include <rw/_meta_cat.h>
+#include <rw/_meta_comp.h>
 #include <rw/_meta_arr.h>
 #include <rw/_meta_cv.h>
 
@@ -75,27 +76,24 @@
 template <class _TypeT>
 struct __rw_is_pod_impl
 {
-    typedef typename
-    __rw_remove_all_extents<_TypeT>::type _TypeU;
-
-    typedef typename
-    __rw_remove_cv<_TypeU>::type _NoCV_TypeU;
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+    typedef typename __rw_remove_cv<_TypeU>::type _NoCV_TypeU;
 
     enum { _C_value = __rw_is_scalar<_NoCV_TypeU>::value };
 };
 
 #    define _RWSTD_TT_IS_POD(T) _RW::__rw_is_pod_impl<T>::_C_value
-#elif defined (_MSC_VER)
+#elif defined (_MSC_VER) || defined (__EDG_VERSION__)
 
 template <class _TypeT>
 struct __rw_is_pod_impl
 {
-    typedef typename __rw_remove_cv<_TypeT> _TypeU;
-    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeV;
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+    typedef typename __rw_remove_cv<_TypeU>::type _NoCV_TypeU;
 
     // the MSVC provided __is_pod works for pod class types only
-    enum { _C_value =    __rw_is_scalar<_TypeV>::value
-                      || _RWSTD_TT_IS_POD(_TypeV) };
+    enum { _C_value =    __rw_is_scalar<_NoCV_TypeU>::value
+                      || _RWSTD_TT_IS_POD(_NoCV_TypeU) };
 };
 
 #  undef  _RWSTD_TT_IS_POD
@@ -112,7 +110,7 @@
 
 
 #ifndef _RWSTD_TT_IS_STANDARD_LAYOUT
-#  define _RWSTD_TT_IS_STANDARD_LAYOUT(T) _RWSTD_TT_IS_POD(T)
+#  define _RWSTD_TT_IS_STANDARD_LAYOUT(T) _RWSTD_IS_POD(T)
 #endif // _RWSTD_TT_IS_STANDARD_LAYOUT
 
 template <class _TypeT>
@@ -154,7 +152,7 @@
 };
 
 #  define _RWSTD_TT_IS_EMPTY(T) _RW::__rw_is_empty_impl<T>::_C_value
-#elif defined (_MSC_VER)
+#elif defined (_MSC_VER) || defined (__EDG_VERSION__)
 
 template <class _TypeT>
 struct __rw_is_empty_impl
@@ -166,7 +164,7 @@
 
 #  undef _RWSTD_TT_IS_EMPTY
 #  define _RWSTD_TT_IS_EMPTY(T) _RW::__rw_is_empty_impl<T>::_C_value
-#endif // !_RWSTD_TT_IS_EMPTY || _MSC_VER
+#endif // !_RWSTD_TT_IS_EMPTY || _MSC_VER || __EDG_VERSION__
 
 template <class _TypeT>
 struct __rw_is_empty
@@ -280,7 +278,22 @@
 #ifndef _RWSTD_TT_HAS_TRIVIAL_CTOR
    // this is just a best guess
 #  define _RWSTD_TT_HAS_TRIVIAL_CTOR(T) _RW::__rw_is_pod<T>::value
-#endif // _RWSTD_TT_HAS_TRIVIAL_CTOR
+#elif defined (__EDG_VERSION__)
+
+template <class _TypeT>
+struct __rw_has_trivial_ctor_impl
+{
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+    typedef typename __rw_remove_cv<_TypeU>::type _NoCV_TypeU;
+
+    enum { _C_value =    __rw_is_scalar<_NoCV_TypeU>::value
+                      || _RWSTD_TT_HAS_TRIVIAL_CTOR (_NoCV_TypeU) };
+};
+
+#  undef _RWSTD_TT_HAS_TRIVIAL_CTOR
+#  define _RWSTD_TT_HAS_TRIVIAL_CTOR(T) \
+     _RW::__rw_has_trivial_ctor_impl<T>::_C_value
+#endif // !_RWSTD_TT_HAS_TRIVIAL_CTOR || __EDG_VERSION
 
 template <class _TypeT>
 struct __rw_has_trivial_ctor
@@ -296,7 +309,22 @@
 #ifndef _RWSTD_TT_HAS_TRIVIAL_COPY
 #  define _RWSTD_TT_HAS_TRIVIAL_COPY(T) \
     _RW::__rw_is_pod<T>::value || _RW::__rw_is_reference<T>::value
-#endif // _RWSTD_TT_HAS_TRIVIAL_COPY
+#elif defined (__EDG_VERSION__)
+
+template <class _TypeT>
+struct __rw_has_trivial_copy_impl
+{
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+    typedef typename __rw_remove_cv<_TypeU>::type _NoCV_TypeU;
+
+    enum { _C_value =    __rw_is_reference<_NoCV_TypeU>::value
+                      || __rw_is_scalar<_NoCV_TypeU>::value
+                      || _RWSTD_TT_HAS_TRIVIAL_COPY (_NoCV_TypeU) };
+}; 
+#  undef _RWSTD_TT_HAS_TRIVIAL_COPY
+#  define _RWSTD_TT_HAS_TRIVIAL_COPY(T) \
+     _RW::__rw_has_trivial_copy_impl<T>::_C_value
+#endif // !_RWSTD_TT_HAS_TRIVIAL_COPY || __EDG_VERSION__
 
 template <class _TypeT>
 struct __rw_has_trivial_copy
@@ -308,12 +336,27 @@
 
 
 
-
 #ifndef _RWSTD_TT_HAS_TRIVIAL_ASSIGN
 #  define _RWSTD_TT_HAS_TRIVIAL_ASSIGN(T) \
     _RW::__rw_is_pod<T>::value && !_RW::__rw_is_const<T>::value \
                                && !_RW::__rw_is_reference<T>::value
-#endif // _RWSTD_TT_HAS_TRIVIAL_ASSIGN
+#elif defined (__EDG_VERSION__)
+
+template <class _TypeT>
+struct __rw_has_trivial_assign_impl
+{
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+
+    enum { _C_value =    !__rw_is_const<_TypeU>::value
+                      && !__rw_is_reference<_TypeU>::value
+                      && (   __rw_is_scalar<_TypeU>::value
+                          || _RWSTD_TT_HAS_TRIVIAL_ASSIGN (_TypeU)) };
+};
+
+#  undef _RWSTD_TT_HAS_TRIVIAL_ASSIGN
+#  define _RWSTD_TT_HAS_TRIVIAL_ASSIGN(T) \
+     _RW::__rw_has_trivial_assign_impl<T>::_C_value
+#endif // !_RWSTD_TT_HAS_TRIVIAL_ASSIGN || __EDG_VERSION__
 
 template <class _TypeT>
 struct __rw_has_trivial_assign
@@ -329,7 +372,24 @@
 #ifndef _RWSTD_TT_HAS_TRIVIAL_DTOR
 #  define _RWSTD_TT_HAS_TRIVIAL_DTOR(T) \
     _RW::__rw_is_pod<T>::value && !_RW::__rw_is_reference<T>::value
-#endif // _RWSTD_TT_HAS_TRIVIAL_DTOR
+#elif defined (__EDG_VERSION__)
+
+template <class _TypeT>
+struct __rw_has_trivial_dtor_impl
+{
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+    typedef typename __rw_remove_cv<_TypeU>::type _NoCV_TypeU;
+
+    enum { _C_value =    __rw_is_scalar<_NoCV_TypeU>::value
+                      || __rw_is_reference<_NoCV_TypeU>::value
+                      || _RWSTD_TT_HAS_TRIVIAL_DTOR (_NoCV_TypeU) };
+};
+
+#  undef _RWSTD_TT_HAS_TRIVIAL_DTOR
+#  define _RWSTD_TT_HAS_TRIVIAL_DTOR(T) \
+    _RW::__rw_has_trivial_dtor_impl<T>::_C_value
+
+#endif // !_RWSTD_TT_HAS_TRIVIAL_DTOR || __EDG_VERSION__
 
 template <class _TypeT>
 struct __rw_has_trivial_dtor
@@ -343,11 +403,8 @@
 template <class _TypeT>
 struct __rw_is_trivial_impl
 {
-    typedef typename
-    __rw_remove_cv<_TypeT>::type _NoCV_TypeT;
-
-    typedef typename
-    __rw_remove_all_extents<_NoCV_TypeT>::type _NoCV_TypeU;
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+    typedef typename __rw_remove_cv<_TypeU>::type _NoCV_TypeU;
 
     enum { _C_value =    __rw_is_scalar<_NoCV_TypeU>::value
                       || __rw_has_trivial_ctor<_NoCV_TypeU>::value
@@ -370,7 +427,21 @@
 
 #ifndef _RWSTD_TT_HAS_NOTHROW_CTOR
 #  define _RWSTD_TT_HAS_NOTHROW_CTOR(T) _RW::__rw_has_trivial_ctor<T>::value
-#endif //_RWSTD_TT_HAS_NOTHROW_CTOR
+#elif defined (__EDG_VERSION__)
+
+template <class _TypeT>
+struct __rw_has_nothrow_ctor_impl
+{
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+
+    enum { _C_value =    __rw_has_trivial_ctor<_TypeT>::value
+                      || _RWSTD_TT_HAS_NOTHROW_CTOR (_TypeU) };
+};
+
+#  undef _RWSTD_TT_HAS_NOTHROW_CTOR
+#  define _RWSTD_TT_HAS_NOTHROW_CTOR(T) \
+     _RW::__rw_has_nothrow_ctor_impl<T>::_C_value
+#endif // !_RWSTD_TT_HAS_NOTHROW_CTOR || __EDG_VERSION__
 
 template <class _TypeT>
 struct __rw_has_nothrow_ctor
@@ -384,7 +455,21 @@
 
 #ifndef _RWSTD_TT_HAS_NOTHROW_COPY
 #  define _RWSTD_TT_HAS_NOTHROW_COPY(T) _RW::__rw_has_trivial_copy<T>::value
-#endif // _RWSTD_TT_HAS_NOTHROW_COPY
+#elif defined (__EDG_VERSION__)
+
+template <class _TypeT>
+struct __rw_has_nothrow_copy_impl
+{
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+
+    enum { _C_value =    __rw_has_trivial_copy<_TypeT>::value
+                      || _RWSTD_TT_HAS_NOTHROW_COPY (_TypeU) };
+};
+
+#  undef _RWSTD_TT_HAS_NOTHROW_COPY
+#  define _RWSTD_TT_HAS_NOTHROW_COPY(T) \
+     _RW::__rw_has_nothrow_copy_impl<T>::_C_value
+#endif // !_RWSTD_TT_HAS_NOTHROW_COPY || __EDG_VERSION__
 
 template <class _TypeT>
 struct __rw_has_nothrow_copy
@@ -399,7 +484,23 @@
 
 #ifndef _RWSTD_TT_HAS_NOTHROW_ASSIGN
 #  define _RWSTD_TT_HAS_NOTHROW_ASSIGN(T) _RW::__rw_has_trivial_assign<T>::value
-#endif // _RWSTD_TT_HAS_NOTHROW_ASSIGN
+#elif defined (__EDG_VERSION__)
+
+template <class _TypeT>
+struct __rw_has_nothrow_assign_impl
+{
+    typedef typename __rw_remove_all_extents<_TypeT>::type _TypeU;
+
+    enum { _C_value =    !__rw_is_const<_TypeU>::value
+                      && !__rw_is_reference<_TypeU>::value
+                      && (   __rw_has_trivial_assign<_TypeT>::value
+                          || _RWSTD_TT_HAS_NOTHROW_ASSIGN (_TypeU)) };
+};
+
+#  undef _RWSTD_TT_HAS_NOTHROW_ASSIGN
+#  define _RWSTD_TT_HAS_NOTHROW_ASSIGN(T) \
+     _RW::__rw_has_nothrow_assign_impl<T>::_C_value
+#endif // !_RWSTD_TT_HAS_NOTHROW_ASSIGN || __EDG_VERSION__
 
 template <class _TypeT>
 struct __rw_has_nothrow_assign

Modified: stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.other.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.other.cpp?rev=676102&r1=676101&r2=676102&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.other.cpp (original)
+++ stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.other.cpp Fri Jul 11 16:58:13 2008
@@ -70,12 +70,14 @@
     return 0;
 }
 
-static int _cond_if_char (void* = 0)
+// must have external linkage
+int _cond_if_char (void*)
 {
     return 0;
 }
 
-static int _cond_if_char (long* = 0)
+// must have external linkage
+int _cond_if_char (long*)
 {
     return 1;
 }

Modified: stdcxx/branches/4.3.x/tests/utilities/20.meta.unary.prop.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.3.x/tests/utilities/20.meta.unary.prop.cpp?rev=676102&r1=676101&r2=676102&view=diff
==============================================================================
--- stdcxx/branches/4.3.x/tests/utilities/20.meta.unary.prop.cpp (original)
+++ stdcxx/branches/4.3.x/tests/utilities/20.meta.unary.prop.cpp Fri Jul 11 16:58:13 2008
@@ -96,6 +96,7 @@
 template <class T>
 struct member_t
 {
+    member_t (T);
     T val;
 };
 
@@ -690,13 +691,16 @@
     TEST (std::is_signed, signed short, true);
     TEST (std::is_signed, signed int, true);
     TEST (std::is_signed, signed long, true);
-    TEST (std::is_signed, signed long long, true);
 
     TEST (std::is_signed, unsigned char, false);
     TEST (std::is_signed, unsigned short, false);
     TEST (std::is_signed, unsigned int, false);
     TEST (std::is_signed, unsigned long, false);
+
+#ifndef _RWSTD_NO_LONG_LONG
+    TEST (std::is_signed,   signed long long, true);
     TEST (std::is_signed, unsigned long long, false);
+#endif
 
     TEST (std::is_signed, float, true);
     TEST (std::is_signed, double, true);
@@ -718,13 +722,16 @@
     TEST (std::is_unsigned, signed short, false);
     TEST (std::is_unsigned, signed int, false);
     TEST (std::is_unsigned, signed long, false);
-    TEST (std::is_unsigned, signed long long, false);
 
     TEST (std::is_unsigned, unsigned char, true);
     TEST (std::is_unsigned, unsigned short, true);
     TEST (std::is_unsigned, unsigned int, true);
     TEST (std::is_unsigned, unsigned long, true);
+
+#ifndef _RWSTD_NO_LONG_LONG
+    TEST (std::is_unsigned, signed long long, false);
     TEST (std::is_unsigned, unsigned long long, true);
+#endif
 
     TEST (std::is_unsigned, float, false);
     TEST (std::is_unsigned, double, false);