Boost logo

Boost :

From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2005-06-19 11:19:58


Hi Boosters/John,

GCC Bug 8503
------------

during the Function Types review there was a report about GCC 3.2 warnings
"volatile qualified function" (remove_cv on a function).

It seems it's http://gcc.gnu.org/bugzilla/show_bug.cgi?8503. According to the
GCC-Bugzilla, John's watching it - probably even the reporter.
However, it seems it's currently not addressed by TypeTraits, so I wrote a
preliminary patch to work around it (see attached file).
Thanks to Jody Hadins for helping tracking it.

is_aggregate == "is_class_or_union"
------------------------------------

Not that I currently need it -- but shouldn't there be a public one like this,
at least for completeness ?

Btw. great new documentation!

Regards,

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 19 Jun 2005 15:06:19 -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) && BOOST_WORKAROUND(__GNUC_MINOR__,<= 2)
+#include "boost/type_traits/detail/yes_no_type.hpp"
 namespace boost {
 namespace detail {
-
-// implementation helper:
+namespace type_traits {
+#else
+namespace boost {
+namespace detail {
+#endif
 
 template <typename T> struct cv_traits_imp {};
 
@@ -54,6 +63,29 @@
     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)
+::boost::type_traits::yes_type mini_funcptr_tester(...);
+::boost::type_traits::no_type mini_funcptr_tester(const volatile void*);
+
+} // namespace type_traits
+
+// Use the implementation above for non function pointers
+template <typename T, unsigned Select
+ = (unsigned)sizeof(boost::detail::type_traits::mini_funcptr_tester((T)0)) >
+struct cv_traits_imp : boost::detail::type_traits::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