Boost logo

Boost :

From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2005-06-20 17:33:22


Tobias Schwinger wrote:
> a preliminary patch to work around it (see attached file).

^^^^^^^^^^^^^^^^^^^^^^^^
Just noticed it doesn't work because it causes name conflicts in some places (I
should've run the whole test-suite...). The one attached this time does, however.

Sorry!

Tobias

Index: boost/type_traits/detail/cv_traits_impl.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/type_traits/detail/cv_traits_impl.hpp,v
retrieving revision 1.3
diff -u -r1.3 cv_traits_impl.hpp
--- boost/type_traits/detail/cv_traits_impl.hpp 3 Dec 2003 13:32:56 -0000 1.3
+++ boost/type_traits/detail/cv_traits_impl.hpp 20 Jun 2005 20:17:04 -0000
@@ -12,13 +12,22 @@
 #define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED
 
 #include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
 
 #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
 
+// implementation helper:
+
+
+#if !(BOOST_WORKAROUND(__GNUC__,== 3) && (__GNUC_MINOR__ <= 2))
 namespace boost {
 namespace detail {
-
-// implementation helper:
+#else
+#include "boost/type_traits/detail/yes_no_type.hpp"
+namespace boost {
+namespace type_traits {
+namespace gcc8503 {
+#endif
 
 template <typename T> struct cv_traits_imp {};
 
@@ -54,6 +63,32 @@
     typedef T unqualified_type;
 };
 
+#if BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2)
+// We have to exclude function pointers
+// (see http://gcc.gnu.org/bugzilla/show_bug.cgi?8503)
+yes_type mini_funcptr_tester(...);
+no_type mini_funcptr_tester(const volatile void*);
+
+} // namespace gcc8503
+} // namespace type_traits
+
+namespace detail {
+
+// Use the implementation above for non function pointers
+template <typename T, unsigned Select
+ = (unsigned)sizeof(::boost::type_traits::gcc8503::mini_funcptr_tester((T)0)) >
+struct cv_traits_imp : ::boost::type_traits::gcc8503::cv_traits_imp<T> { };
+
+// Functions are never cv-qualified
+template <typename T> struct cv_traits_imp<T*,1>
+{
+ BOOST_STATIC_CONSTANT(bool, is_const = false);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = false);
+ typedef T unqualified_type;
+};
+
+#endif
+
 } // namespace detail
 } // namespace boost
 


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk